【问题标题】:Redirect Non WWW to WWW format and to HTTPS in VirtualHost将非 WWW 重定向到 WWW 格式并重定向到 VirtualHost 中的 HTTPS
【发布时间】:2017-08-04 13:17:08
【问题描述】:

非 www 重定向到 www 并强制 https,仅在 http://www.example.com 上返回 302 temporary redirect

根据协议和主机名查看下面的Status Codes - 测试我的网站http://www.mypetcerts.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

【问题讨论】:

    标签: apache virtualhost http-redirect amazon-elb apache2.2


    【解决方案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 您想用替代或增强的解决方案更新我的答案吗?
    猜你喜欢
    • 2016-09-09
    • 1970-01-01
    • 2017-11-24
    • 2017-03-24
    • 1970-01-01
    • 1970-01-01
    • 2018-04-22
    • 1970-01-01
    • 2016-01-07
    相关资源
    最近更新 更多