![重写规则与 .htaccess 中的尾部斜杠无关](https://linux22.com/image/728645/%E9%87%8D%E5%86%99%E8%A7%84%E5%88%99%E4%B8%8E%20.htaccess%20%E4%B8%AD%E7%9A%84%E5%B0%BE%E9%83%A8%E6%96%9C%E6%9D%A0%E6%97%A0%E5%85%B3.png)
我想重定向 URL,而不考虑尾部斜杠。原因是我的网站默认强制使用尾部斜杠;如果内部链接缺少尾部斜杠,那么我就会有一个重定向链 (/test -> /test/ -> /go-here/)。
我试过了:
- 这不起作用:
RewriteRule ^test(/$|$) /go-here/ [R=301,L]
- 这可行:(
Redirect 301 /test /go-here/
但我不想这样做)
本质上,我想要一种好的方法来重定向如下所示实例的 URL,而不必在我的 .htacess 文件中写大量的行。
/test -> /go-here/
/test/ -> /go-here/
答案1
使用“once of nonce”运算符,它是 {0,1} 的缩写
RewriteRule ^test/?$ /go-here/ [R=301,L]
答案2
如上所述,您可以使用 ? 运算符来匹配带斜线和不带斜线的,这是最精确的方法。
不过,值得一提的另一种方法是只匹配字符串的开头。在正则表达式中,^ 匹配字符串的开头,$ 匹配字符串的结尾。通常人们会同时包含这两个,但您不必同时包含它们,甚至不必包含其中任何一个(如果您想匹配中间的字符串,而该字符串不在开头或结尾附近)。
因此,这也将实现您所追求的目标:
重写规则 ^test /go-here/ [L,R=301]
以“test”开头的任何内容都会被匹配,无论其后是什么斜线或其他内容。
但要小心,因为这也会匹配 /testing 或 /tester。