【问题标题】:301 Redirect and Mod_Rewrite Rule in .htaccess file cause a Redirection chain (Wordpress).htaccess 文件中的 301 重定向和 Mod_Rewrite 规则导致重定向链 (Wordpress)
【发布时间】:2017-04-01 22:42:10
【问题描述】:

我正在重新开发一个 Wordpress 站点,并且站点结构发生了巨大变化,因此我需要从旧 URL 执行重定向并在 .htaccess 文件中强制使用 HTTPS。

我遇到的问题是我的代码连续产生两个 301 重定向,我需要将它们合并为 1 301 重定向。

这是 .htaccess 文件:

将各个页面重定向到新的 URL:

Redirect 301 "/old-site-url-1" "/new-site-url-1"
Redirect 301 "/old-site-url-2" "/new-site-url-2”
Redirect 301 "/old-site-url-3" "/new-site-url-3”

全局重定向所有请求,因此请使用 https://

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

结果是这个重定向链:

301 - http://mydomain/old-site-url-1(旧站点是非 SSL)

301 - https://mydomain/old-site-url-1(Mod-Rewrite 规则强制 https://)

200 - https://mydomain/new-site-url-1(301 重定向启动并找到新 URL)

我希望将两个 301 重定向合并为一个。

我有什么方法可以使用标志 (https://httpd.apache.org/docs/2.4/rewrite/flags.html) 或其他东西来跳过强制 SSL 指令并将 301 重定向切换到使用 HTTPS 的绝对 URL?

重写规则总是在 301 重定向之前处理。有什么办法可以推迟它,然后测试页面是否已经在使用 HTTPS?

【问题讨论】:

    标签: wordpress .htaccess mod-rewrite http-status-code-301


    【解决方案1】:

    问题是您将 mod-alias ( Redirect directive ) 与 mod-rewrite ( RewriteRule ) 混合在一起。它们是两个不同模块的一部分。 Mod-rewrite 总是在 mod-alias 之前运行。您需要使用 rewriteRule 而不是 Redirect 指令来处理旧请求。在您的 SSL 重定向规则之后或 #wp 规则之前添加以下规则:

    RewriteRule ^old-path-1/?$ https://example.com/new-path-1 [L,R]
    RewriteRule ^old-path-2/?$ https://example.com/new-path-2 [L,R]
    

    【讨论】:

      猜你喜欢
      • 2010-12-22
      • 2011-01-05
      • 1970-01-01
      • 2012-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多