【问题标题】:Decrease the number of redirects without www for www http for https减少不带 www 的重定向次数为 www http 为 https
【发布时间】:2019-07-31 22:35:09
【问题描述】:

我正在尝试以尽可能少的重定向将不带 www 的 url 重定向到 www 和不带 https 的 url 重定向到 https。

我正在使用这条规则

# BEGIN SSL Redirect
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>
# END SSL Redirect

问题是,如果我尝试访问此 url,此规则会生成许多重定向

example.com

去做

http://example.com/ ==> http://www.example.com/ ==> https://www.example.com/

我希望你这样做

http://example.com/ ==> https://www.example.com/

【问题讨论】:

    标签: apache .htaccess redirect


    【解决方案1】:

    你可以用这个:

    # BEGIN SSL + non www to www  Redirect
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTP:X-Forwarded-Proto} =http [OR]
    RewriteCond %{HTTP_HOST} !^www\. [NC]
    RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
    RewriteRule ^ https://www.%1%{REQUEST_URI} [L,R=301]
    </IfModule>
    # END SSL + www Redirect
    

    这将在单个请求中将非 ssl 和非 www 重定向到 https://www

    如果您不在代理代理服务器上(即:cloudflare..),那么您需要将此行 RewriteCond %{HTTP:X-Forwarded-Proto} =http [OR] 替换为 RewriteCond %{HTTPS} off [OR] 才能使其正常工作。

    【讨论】:

    • 这一行没有 RewriteRule ^ https://%1%{REQUEST_URI} [L,R=301] 工作它重定向到这个: https:// _% 7Bhttp_host% 7D / 所以我改变了因为那个 RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 但发生错误 ERR_TOO_MANY_REDIRECTS
    • 抱歉,有一个小错误。请查看修改后重试。
    • @BrunoAndrade 我更新了代码。清除浏览器缓存并再次测试
    猜你喜欢
    • 1970-01-01
    • 2018-09-26
    • 2015-04-06
    • 2017-12-04
    • 2016-02-28
    • 2015-10-23
    • 1970-01-01
    • 2017-09-08
    • 2023-03-16
    相关资源
    最近更新 更多