将非 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.com

example.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】:

解决了!使用 RedirectRewrite 的组合,我能够获得从 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的主要内容,如果未能解决你的问题,请参考以下文章

NGINX 将 http 重定向到 https,将非 www 重定向到 ww

将非www重定向到www的最佳方法?

codeigniter 将非 www 重定向到 www

将非 WWW 重定向到 WWW URL

也将非 www 重定向到 www 子页面

web.config 将非 www 重定向到 www