Apache重定向除一个以外的所有子目录

时间:2017-01-06 22:14:27

标签: apache .htaccess redirect mod-rewrite

所以,我有以下网址:

www.example.com/parent/child1
www.example.com/parent/child2
www.example.com/parent/child3
www.example.com/parent/cool-feature
www.example.com/parent/product
etc...

我需要将除child2之外的所有子项重定向到新域。

到目前为止,我已提出:

RedirectMatch ^/parent(?!/child2) http://www.new-example.com/parent/

这适用于:

www.example.com/parent/child2

但不适用于:

www.example.com/parent/child2/

由于斜杠

无济于事,我尝试过:

RedirectMatch ^/parent(?!/child2/) http://www.new-example.com/parent/
RedirectMatch ^/parent(?!/child2\/) http://www.new-example.com/parent/
RedirectMatch ^/parent(?!/child2)/ http://www.new-example.com/parent/
RedirectMatch ^/parent/(?!child2)/ http://www.new-example.com/parent/

1 个答案:

答案 0 :(得分:2)

正如评论中所提到的,您的初始指令本身应该按预期工作。 <{1}},/parent/child2/parent/child2/都不应重定向。

但是,由于您有“其他指令”,包括“前端控制器”,您可能会发生冲突。特别是因为你的前端控制器可能使用mod_rewrite而/parent/child2/anything是一个mod_alias指令。尽管RedirectMatch中的明显顺序,mod_rewrite将始终首先执行。但是这些重定向应该首先在前端控制器之前执行。

尝试将其更改为mod_rewrite重定向,并确保它位于前端控制器之前的.htaccess文件的顶部附近。

.htaccess