通过htaccess文件我试图redirect/services /services/onetime但它redirect到/services/onetime/onetime/onetime/...
代码有什么问题,有没有办法做到这一点?
这是我用过的代码:
redirect 301 /services/ /services/onetime/
redirect 301 /services/ /service/onetime/
(假设这只是目标url上的拼写错误?)
mod_alias Redirect指令是前缀匹配,并将匹配后的所有内容附加到目标URL的末尾。 因此,这也将匹配redirect的URL /services/onetime/ ,然后将匹配后的所有内容(即onetime/ )追加到/services/onetime/等的末尾,直到达到浏览器redirect限制。
您将需要使用(mod_alias) RedirectMatch指令,而使用正则expression式。 例如:
RedirectMatch 301 ^/services/$ /services/onetime/
这只匹配/services/并redirect到/services/onetime/ (包括尾部的斜杠)。
确保在testing之前清除了任何中间caching,因为之前(错误的)301redirect可能已被浏览器caching。
但是,如果你有现有的mod_rewrite指令(即RewriteRule ),那么你应该考虑使用mod_rewrite来代替这个redirect,以避免潜在的冲突。 例如:
RewriteRule ^services/$ /services/onetime/ [R=301,L]
这可能需要在任何其他mod_rewrite指令之前 。 使用临时(302)redirect进行testing会更容易,因为它们不会被浏览器caching,与永久(301)redirect不同。 所以,确保您的浏览器caching被清除。
这应该工作(除非有其他规则的干扰):
RewriteEngine on RewriteRule ^(.*)services /services/onetime [L,QSA]