[php] 使用.htaccess和mod_rewrite強制SSL / https



3 Answers

我發現了一個mod_rewrite解決方案,適用於代理和非代理服務器。

如果您正在使用CloudFlare,AWS Elastic Load Balancing,Heroku,OpenShift或任何其他雲/ PaaS解決方案,並且遇到正常HTTPS重定向的重定向循環 ,請嘗試使用以下代碼段。

RewriteEngine On

# If we receive a forwarded http request from a proxy...
RewriteCond %{HTTP:X-Forwarded-Proto} =http [OR]

# ...or just a plain old http request directly from the client
RewriteCond %{HTTP:X-Forwarded-Proto} =""
RewriteCond %{HTTPS} !=on

# Redirect to https version
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Question

我如何在PHP中使用.htaccess和mod_rewrite頁面強制SSL / https。




只需用Apache .htaccess強制SSL就可以使用

SSLOptions +StrictRequire
SSLRequireSSL

重定向上面的答案是正確的




基於Mod重寫的解決方案:

在htaccess中使用以下代碼會自動將所有http請求轉發到https。

RewriteEngine on

RewriteCond %{HTTPS}::%{HTTP_HOST} ^off::(?:www\.)?(.+)$
RewriteRule ^ https://www.%1%{REQUEST_URI} [NE,L,R]

這會將您的非wwwwww http請求重定向到www版本的https。

另一個解決方案(Apache 2.4 *)

RewriteEngine on

RewriteCond %{REQUEST_SCHEME}::%{HTTP_HOST} ^http::(?:www\.)?(.+)$
RewriteRule ^ https://www.%1%{REQUEST_URI} [NE,L,R]

這對低版本的apache不起作用,因為自從2.4開始,%{REQUEST_SCHEME}變量被添加到mod-rewrite中。




此代碼適用於我

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP:X-HTTPS} !1
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]



Related