【问题标题】:Is it necessary to keep the HTTPS RewriteRule after a 301 Redirect?301重定向后是否需要保留HTTPS RewriteRule?
【发布时间】:2021-02-05 14:04:39
【问题描述】:

我已成功完成通配符 301 重定向,但我想知道是否有必要保留强制 HTTPS 的重写规则以及 .htaccess 文件中的代码顺序是否重要。

例如,我应该做一个重定向链,如 http://oldsite.comhttps://oldsite.comhttps://newsite.com

这是旧网站上的 .htacess 文件:

# HTTPS forced by SG-Optimizer
<IfModule mod_rewrite.c>
    RewriteEngine On
    
    RewriteCond %{HTTP:X-Forwarded-Proto} !https
    RewriteCond %{HTTPS} off
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>
# END HTTPS

#REDIRECT
Redirect 301 / https://newsite.com/
#END REDIRECT

【问题讨论】:

    标签: apache .htaccess redirect https


    【解决方案1】:

    首先,将mod_rewrite 指令与RedirectRedirectMatch 指令混合使用是一个坏主意,因为它们是Apache 中的不同模块,并且不同的模块以不同的顺序执行。

    其次,您还应该避免在浏览器中导致多次重定向,因为这被认为是不良的用户体验,也会给您的网络服务器造成不必要的负担。

    您应该将您的特定重定向规则放置在 通用 http -&gt; https 重定向之前,如下所示:

    <IfModule mod_rewrite.c>
        RewriteEngine On
        
        #REDIRECT
        RewriteCond %{HTTP_HOST} ^(?:www\.)?oldsite\.com$ [NC]
        RewriteRule ^ https://newsite.com%{REQUEST_URI} [L,NE,R=301]
        #END REDIRECT
    
        RewriteCond %{HTTP:X-Forwarded-Proto} !https
        RewriteCond %{HTTPS} off
        RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    </IfModule>
    # END HTTPS
    

    这样oldsite.com 的所有流量都会在单次重定向中重定向到https://newsite.com

    只有在您支持oldsite.com 以外的任何其他网站时,才会执行您的http -&gt; https 重定向。

    【讨论】:

    • 感谢您的回答!正在网上搜寻解决方案,但找不到直接答案!
    • 您好 anubhava 先生,恕我直言,RewriteCond %{HTTPS} off 看起来是多余的吗?因为在以前的情况下,我们在这里检查了它%{HTTP:X-Forwarded-Proto} !https。只是想知道第二个在这里是否有任何特殊意义。
    • 对于标准的 Apache 服务器可能是多余的,但如果中间有代理,那么有时 %{HTTPS} 不会被填充。
    • @anubhava,谢谢你的澄清,很抱歉这个愚蠢的问题欢呼:)
    • 不,这根本不是一个愚蠢的问题。
    猜你喜欢
    • 2011-12-10
    • 1970-01-01
    • 1970-01-01
    • 2019-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-22
    • 2010-11-26
    相关资源
    最近更新 更多