我试图通过 htaccess 文件重定向/services
到/services/onetime
但它将我重定向到/services/onetime/onetime/onetime/...
代码存在什么问题?有办法解决吗?
这是我使用过的代码:
redirect 301 /services/ /services/onetime/
答案1
redirect 301 /services/ /service/onetime/
(假设这只是目标 URL 上的拼写错误?)
mod_aliasRedirect
指令是前缀匹配,并将匹配后的所有内容附加到目标 URL 的末尾。因此,这也会匹配重定向的 URL /services/onetime/
,然后附加所有内容后匹配(即onetime/
)到的末尾/services/onetime/
,等等,直到达到浏览器重定向限制。
您需要改用 (mod_alias)RedirectMatch
指令,该指令使用正则表达式。例如:
RedirectMatch 301 ^/services/$ /services/onetime/
这仅有的匹配/services/
并重定向到/services/onetime/
(包括尾随斜杠)。
确保在测试之前已清除所有中间缓存,因为任何先前的(错误的)301 重定向都可能已被浏览器缓存。
但是,如果您有现有的 mod_rewrite 指令(即RewriteRule
),那么您应该考虑使用 mod_rewrite 进行此重定向,以避免潜在的冲突。例如:
RewriteRule ^services/$ /services/onetime/ [R=301,L]
这可能需要前任何其他 mod_rewrite 指令。使用临时 (302) 重定向进行测试会更容易,因为它们不会被浏览器缓存,而不像永久 (301) 重定向。因此,请确保清除浏览器缓存。
答案2
这应该可行(除非有其他规则干扰):
RewriteEngine on
RewriteRule ^(.*)services /services/onetime [L,QSA]