![](/img/trans.png)
[英]htaccess redirecting http://(www.)old.com and https://(www.)old.com to https://new
[英].htaccess file not redirecting http://www. to https://www
我制作了一個.htaccess文件,將所有網站流量重定向到https://www.
。
這是我完整的.htaccess文件:
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.example\.com [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]
以下重定向完全按預期工作:
http://example.com -> https://www.example.com
https://example.com -> https://www.example.com
https://www.example.com -> https://www.example.com
除了:
http://www.example.com -> http://www.example.com
如上所示,如果你去http://www.
它不會重定向到HTTPS版本。
誰能幫助我理解為什么其他重定向工作正常,但那個不是?
附加說明: 我已經查看了StackOverflow上的一些帖子,但他們的大部分解決方案都以重定向循環錯誤結束。
在聯系123-Reg(我的托管服務提供商)后,他們提交了此解決方案,該解決方案完美運行:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301,NC]
RewriteCond %{ENV:HTTPS} !=on
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
基本上他們已經將腳本設置為執行兩項任務:將域更改為WWW
,如果尚未更改,則更改為HTTPS
。 此外,他們使用ENV:HTTPS
,這與他們的文檔( ENV:SSL
)中的內容不同。
很高興有這個排序,也許這將幫助其他人使用123-Reg Hosting。
RewriteEngine On RewriteCond %{HTTP_HOST} !^www\\.example\\.com [NC] RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]
如您www.example.com
,無論是HTTP還是HTTPS,在請求規范主機名(即www.example.com
)時都不會重定向。
您需要將其更改為:
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\.example\.com
RewriteRule (.*) https://www.example.com/$1 [R=301,L]
如果HTTPS“關閉” 或者它不是規范主機名,這將觸發重定向到規范URL。
...但他們的大多數解決方案都以重定向循環錯誤結束。
如果您在管理SSL證書的代理(例如CloudFlare)后面,那么這仍然可能導致重定向循環,因為您和代理之間的連接可能是HTTP,而不是HTTPS。 這意味着您的服務器僅通過HTTP提供內容,而不是HTTPS。 如果是這種情況,則可以在請求中檢查其他標頭(例如, X-Forwarded-Proto
)或在CloudFlare(靈活SSL - 免費服務)的情況下設置“頁面規則”。
更新#1: 123-Reg提供有關SSL的幫助文檔 。 當“連接受SSL保護”時,它們似乎設置了SSL
環境變量。 這意味着您可能會執行以下操作:
RewriteCond %{ENV:SSL} ^$ [OR]
RewriteCond %{HTTP_HOST} !^www\.example\.com
RewriteRule (.*) https://www.example.com/$1 [R=301,L]
然而,這是123-Reg的非標准和“獨特”。 ( 旁白: 123-Reg鏈接文檔中的PHP代碼建議不是檢查環境變量的推薦方法,因為如果未設置變量,這將導致E_NOTICE!?)
您還應確保在測試之前清除瀏覽器緩存。
更新#2:為了幫助調試...找出返回的值,可以將一些Apache值分配給環境變量,並在服務器端腳本中檢查這些值(例如PHP?)。 例如:
RewriteCond %{HTTPS} (.*)
RewriteRule ^ - [E=APACHE_HTTPS:%1]
# You don't really need this, but for completeness...
RewriteCond %{ENV:SSL} (.*)
RewriteRule ^ - [E=APACHE_SSL:%1]
RewriteCond %{HTTP:X-Forwarded-Proto} (.*)
RewriteRule ^ - [E=APACHE_PROTO:%1]
然后檢查服務器端腳本中的環境變量APACHE_HTTPS
, APACHE_SSL
和APACHE_PROTO
。 (例如,在PHP中,使用getenv()函數。)
經過123 Reg的許多問題並使用Wordpress將所有版本的頁面重定向到單個相關的https頁面,這就是我現在在多個站點上工作的東西,並且已經證明在SEO方面是有效的。 希望能幫助到你!
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{ENV:HTTPS} !=on
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.