Apache-2.2
將 https://www.example.com 重定向到 https://example.com 不起作用
我正在使用 elasticbeanstalk 將 HTTP 請求重定向到安全埠。
我想將我的所有請求重定向到
https://example.com
.以下場景有效
http://www.example.com
–>https://example.com
http://example.com
–>https://example.com
然而,
https://www.example.com
–> 不起作用,它重定向到https://www.example.com
我正在使用以下重寫規則
RewriteEngine On RewriteCond %{HTTP:X-Forwarded-Proto} =http RewriteCond %{HTTPS} off [OR] RewriteCond %{HTTP_HOST} ^www\. [NC] RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC] RewriteRule ^ https://%1%{REQUEST_URI} [L,NE,R=301]
我借助以下文章了解了案例 https://simonecarletti.com/blog/2016/08/redirect-domain-http-https-www-apache/
據我了解,以下條件應該有效
RewriteCond %{HTTP_HOST} ^www\. [NC]
據我了解,以下條件應該有效
RewriteCond %{HTTP_HOST} ^www\. [NC]
是的,這“有效”。但是,您的第一個條件:
RewriteCond %{HTTP:X-Forwarded-Proto} =http
確保僅針對 HTTP 請求處理該指令。
如果您使用的是Elastic Beanstalk,那麼我認為您無論如何都不應該檢查
%{HTTPS}
(至少您不需要) - 因為它總是會檢查off
。您可以通過刪除此冗餘檢查並將OR
標誌移至第一個條件來解決您的問題。例如:RewriteEngine On RewriteCond %{HTTP:X-Forwarded-Proto} =http [OR] RewriteCond %{HTTP_HOST} ^www\. [NC] RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC] RewriteRule ^ https://%1%{REQUEST_URI} [L,NE,R=301]
(*另外:*檢查兩者時需要小心
%{HTTP:X-Forwarded-Proto}
,%{HTTPS}
因為如果不是從代理後面提供,這可能會使某人繞過您的重定向。如果您不是從代理後面提供內容,那麼您不應該檢查%{HTTP:X-Forwarded-Proto}
。)