如何将 /services 重定向到 /services/onetime?

如何将 /services 重定向到 /services/onetime?

我试图通过 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]

相关内容