如何使用htaccess重定向除一个子目录以外的所有子目录

时间:2009-05-29 13:19:02

标签: .htaccess redirect mod-alias

已经有一段时间了,因为我已经搞砸了.htaccess而且我似乎无法做到这一点。我有一个网站,例如example.com,我希望example.com/*重定向到example.com/collector.html ,除了以下的子目录example.com/special下的URL,我想要的继续工作。

例如:

  • example.com/page.html应重定向到example.com/collector.html
  • example.com/foo/bar应重定向到example.com/collector.html
  • example.com/special/page.html不应重定向

我会想到像

这样的东西
RedirectMatch 302 ^/[^(special)]/.* /collector.html
RedirectMatch 302 ^/[^(collector.html)/]* /collector.html

可以做到这一点,但它似乎不像我想要的那样工作。

4 个答案:

答案 0 :(得分:4)

也许这个? (需要mod_rewrite)

RewriteEngine On
RewriteRule !^(special(/.*)?|collector\.html)$ collector.html [R,L]

答案 1 :(得分:2)

这对我来说在Apache 2.2.13上运行正常,我重新创建了你描述的目录结构。

RedirectMatch 302 /(?!special)  http://www.example.com/collector.html

如果URI包含字符串'special',则括号中的模式表示不匹配。

此外,mod重写并不总是可用,在这种情况下不需要。

答案 2 :(得分:0)

试试这个:

RedirectMatch 302 /\/[^(special)]\/.+/ /collector.html 
RedirectMatch 302 /\/[^(collector\.html)]/ /collector.html

答案 3 :(得分:0)

也许......?

RewriteEngine on
RewriteRule ^(?!special) collector.html [R,NC]