我正在重新开发一个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?
答案 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]