将非 WWW 重定向到 WWW 格式并重定向到 VirtualHost 中的 HTTPS
Posted
技术标签:
【中文标题】将非 WWW 重定向到 WWW 格式并重定向到 VirtualHost 中的 HTTPS【英文标题】:Redirect Non WWW to WWW format and to HTTPS in VirtualHost 【发布时间】:2017-08-04 13:17:08 【问题描述】:非 www 重定向到 www 并强制 https,仅在 http://www.example.com
上返回 302 temporary redirect。
根据协议和主机名查看下面的Status Codes - 测试我的网站http://www.mypetcerts.com
https://www.example.com -> 200 https://example.com -> 301 - https://www.example.com http://example.com -> 301 -> https://www.example.com http://www.example.com -> 302 -> https://www.example.comexample.conf
<VirtualHost *:80>
ServerName www.example.com
# server config
</VirtualHost>
<VirtualHost *:80>
ServerName example.com
RedirectMatch permanent ^/?(.*) https://www.mypetcerts.com/$1
</VirtualHost>
我想这是因为我在没有 https 重定向的情况下点击了上面的 VirtualHost 1,因为规范名称是正确的,并且不需要在 ServerName example.com 上点击 VirtualHost 2。有人对这种风格设置有答案吗?我也在 Amazon ELB 上运行。
注意:这是 Apache2.2 我不能利用 Apache2.4 IF 指令 :(
我认为可以先重定向到 www,然后再重定向到 https,但据我了解,执行多重重定向(例如先到 www,然后再到 https)对 SEO 来说不是很好。
我需要所有可能的结果才能使用单个 301 permanent redirect 转到 https://www.example.com。
【问题讨论】:
【参考方案1】:解决了!使用 Redirect 和 Rewrite 的组合,我能够获得从 HTTP 的单个 301 永久重定向,非 www 到 HTTPS www。我正在使用如下所示的 RewriteCond 仅在 HTTP 上处理我的后端侦听器(例如:80)。
请看这里:AWS Support
<VirtualHost *:80>
ServerName www.example.com
RewriteEngine On
RewriteCond %HTTP:X-Forwarded-Proto !=https
RewriteRule ^/(.*)$ https://%SERVER_NAME/$1 [R=301,L]
# additional optional server config
</VirtualHost>
<VirtualHost *:80>
ServerName example.com
RedirectMatch permanent ^/?(.*) https://www.example.com/$1
</VirtualHost>
【讨论】:
X-Forwarded-Proto
不一定要为所有 HTTPS 请求设置。
请您扩展您的回复,或编辑提供的答案以提供更多信息,以帮助提供更完整的解决方案和可能的变体?
HTTPS 请求并非总是具有X-Forwarded-Proto
标头集。这意味着使用上述配置,HTTPS 请求可能不会按照问题要求正确重定向。
@ChrisStryczynski 您想用替代或增强的解决方案更新我的答案吗?以上是关于将非 WWW 重定向到 WWW 格式并重定向到 VirtualHost 中的 HTTPS的主要内容,如果未能解决你的问题,请参考以下文章