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

将 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]

答案1

根据我的理解,以下条件应该起作用

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}。)

相关内容