apache RewriteRule否定失败

yruzcnhs  于 2023-10-23  发布在  Apache
关注(0)|答案(1)|浏览(158)

我正在尝试以下重定向:
任何URL,例如:

  1. /about/apple/1
  2. /about/green
  3. /about/apples
  4. /about/pears/1

收件人:

  1. /about/apple

使用以下方法,这不起作用:

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

以下测试线工作正常:

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

我试过:

  1. RewriteRule ^about/!(apple) /about/apple [R=301,L]
  2. RewriteRule ^about/(?!apple) /about/apple [R=301,L]
  3. RewriteCond %{REQUEST_FILENAME} !(about/apple)
  4. RewriteCond %{REQUEST_FILENAME} about(.*)
  5. RewriteRule . /about/apple [R=301,L]

也试着把它放进一个重写前手,但没有工作。

wxclj1h5

wxclj1h51#

您的正则表达式模式^about/(?!apples)与您想要重定向的uri都不匹配。它匹配/about/foobar,但不匹配/about/apples/about/apples/foobar,因为您已经在模式中否定了apples子串。
您可以使用

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

这会将/about/apples//about/apples/foobar重定向到/about/foobar
请确保在测试之前清除浏览器缓存。

相关问题