【问题标题】:How to force SSL and WWW in one redirect?如何在一个重定向中强制 SSL 和 WWW?
【发布时间】:2017-06-23 08:21:22
【问题描述】:

我想在强制使用 https 和 www 的同时尽量减少重定向。

试图得到...

http://example.com

...直接去...

https://www.example.com

... 在一个重定向中。不是三个,两个,甚至不是我在一个阶段拥有的 19 个!我坚持为 www 设置一个重定向。位,然后对 https 位进行另一个重定向。

目前在我的 .htacess 中有这个:

RewriteEngine On

RewriteCond %{HTTP_HOST} ^example.com$

RewriteRule ^(.*)$ https://www.example.com/$1 [R=301]

我正要认输,感觉不可能将两条规则合二为一……但后来我发现 Amazon.com 已经实现了!想知道怎么做?这是否涉及在 .htacess 之外做一些事情?

Screenshot of Amazon.com and their straight-to-the-point redirect

【问题讨论】:

    标签: apache .htaccess redirect web https


    【解决方案1】:

    要强制 https 和 www 在一个重定向中,您可以使用

    RewriteEngine on
    
    RewriteCond %{HTTP_HOST} !^www [OR]
    RewriteCond %{HTTPS} off
    RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$
    RewriteRule ^ https://www.%1%{REQUEST_URI} [NE,L,R]
    

    【讨论】:

    • 试过了,仍然会导致两个重定向链。
    • 谢谢,但它仍然提供了两个重定向链 - 一个用于 https,一个用于 www。
    • 您的 htaccess 中是否还有其他重定向?
    • 下面有一个旧页面的 301 和一个错误文档 404 规则。但删除这些不会影响问题。
    【解决方案2】:

    这样试试吧,

    RewriteEngine On
    RewriteCond %{HTTPS} !=on [OR]
    RewriteCond %{HTTP_HOST} !^www
    RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    

    【讨论】:

    • 几乎!但这并不强制 www。在这种情况下,这是必需的。在我看到亚马逊这样做之前,我几乎确信在一条规则中强制使用 https 和 www 是不可能的。我不应该看的!!
    • 你确定吗?它在本地和实时服务器上对我来说都很好。
    • 是的,www。不会被强迫,只是https。我尝试了很多 .htacess tweeks 都没有成功。让我想知道答案是否超出 .htacess。
    猜你喜欢
    • 1970-01-01
    • 2015-11-02
    • 2016-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-02
    相关资源
    最近更新 更多