RewriteRule否定(NOT)不起作用

时间:2018-05-04 18:02:08

标签: mod-rewrite url-rewriting mod

我正在尝试执行以下重定向:

任何网址,例如:

/about/apple/1
/about/green
/about/apples
/about/pears/1

为:

/about/apple

使用以下内容,但不起作用:

RewriteRule ^about/(!apple) /about/apple [R=301,L]

以下测试行正常工作:

RewriteRule ^about/apples /about/apple [R=301,L]

我试过了:

RewriteRule ^about/!(apple) /about/apple [R=301,L]
RewriteRule ^about/(?!apple) /about/apple [R=301,L]

RewriteCond %{REQUEST_FILENAME} !(about/apple)
RewriteCond %{REQUEST_FILENAME} about(.*)
RewriteRule . /about/apple [R=301,L]

并且还尝试将其置于重写之前,但没有任何作用。

感谢。

1 个答案:

答案 0 :(得分:0)

您的正则表达式模式^about/(?!apples)与您要重定向的uris都不匹配。它匹配/about/foobar但与/about/apples/about/apples/foobar不匹配,因为您已取消模式中的apples子字符串。

您可以使用

RewriteRule ^about/apples/(.*)$  /about/$1 [L,R]

这会将/about/apples//about/apples/foobar重定向到/about/foobar

确保在测试之前清除浏览器缓存。