我已将博客移至子域名,并且子域名上的所有类别都已更改,因此我想从旧域名到子域名(不同的托管)创建一个 301 重定向列表。
我遇到的问题是添加尾部斜杠,这样我就不必将每个 URL 列出两次。
我尝试过这个/blog/.htaccess
:
RewriteEngine On
#RewriteRule ^(.*)$ http://domain.com/blog/$1/ [L,R=301]
Redirect 301 /blog/test/ https://new.domain.com/test/
Redirect 301 /blog/example/ https://new.domain.com/example/
(etc...)
但由于浏览器检测到太多重定向,因此此方法不起作用。
这里的正确语法是什么?
我也尝试过:
RedirectMatch /blog/test/?$ https://new.domain.com/test/ [L,R=301]
但这似乎根本不起作用。
答案1
请使用以下语法
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !example.php
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://example.com/$1/ [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-f
确保现有的文件不会添加斜线。
RewriteCond %{REQUEST_URI} !example.php
排除不应重写的示例 URL。
当 URL 不包含尾部斜杠时,RewriteCond %{REQUEST_URI} !(.*)/$ 最终会触发 - 这正是我们想要的。现在我们需要使用尾部斜杠重定向这些 URL:
RewriteRule ^(.*)$ http://example.com/$1/ [L,R=301]
是否将 301 重定向到带有尾部斜杠的 URL。您应该将 domain.com 替换为您的 URL。
答案2
似乎有效的语法是:
RedirectMatch 301 /blog/test/?$ https://new.domain.com/test/