.htaccess文件中的301重定向和Mod_Rewrite规则会导致重定向链(Wordpress)

时间:2017-04-01 03:37:51

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

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

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

这是.htaccess文件:

将各个网页重定向到新网址:

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重定向启动并找到新网址)

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

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

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

1 个答案:

答案 0 :(得分:0)

问题是您正在将mod-alias( Redirect指令)与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]