【发布时间】: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