Apache-2.2

https://www.example.com 重定向到 https://example.com 不起作用

  • December 18, 2017

我正在使用 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}。)

引用自:https://serverfault.com/questions/888680