正确的htaccess文件中的重写规则顺序

时间:2009-07-10 11:18:51

标签: .htaccess mod-rewrite errordocument

我需要:

http://www.example.com/v1/my-project/重定向到http://example.com/my-project/

所以:

(1)从http_host中删除www

RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule ^(.*)$ http://example.com/$1 [R=301,L]

(2)删除request_uri

的'v1 /'部分
RewriteCond %{REQUEST_URI} ^/v1/(.*)$ [NC]
RewriteRule . %1 [R=301,L]

(3)我还想将所有404重定向到主页。

ErrorDocument 404 /

(4)最后,我的所有文档实际上都位于一个“v2 /”文件夹中,该文件夹托管当前活动的网站,但我不想在网址中使用“v2”,只需“/”

RewriteCond %{REQUEST_URI} !^/v2/ [NC]
RewriteRule ^(.*)$ /v2/$1 [NC,L]

所以,这是我的规则。我的问题是:我没有管理(2):它被重定向到/(因为规则(3)我猜。我认为我的规则的顺序必定是错误的但我似乎无法做到正确。可以你帮忙吗?

2 个答案:

答案 0 :(得分:3)

“规则3”根本不是规则,其相对于您的RewriteRules的顺序无关紧要。规则2由于其他原因而失败。我不确定它是否会解决你的问题,但我会通过这样写出来简化你的规则:

RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule (.*) http://example.com/$1 [R=301,L]

RewriteRule ^v1/(.*) /$1 [R=301,L,NC]

RewriteCond %{REQUEST_URI} !^/v2/ [NC]
RewriteRule (.*) /v2/$1 [NC,L]

答案 1 :(得分:0)

您应首先编写导致外部重定向(R标志)的任何规则,然后编写其他规则。否则,已经重写的URL可以用于外部重定向,尽管它只是用于内部重定向。

所以我不会改变你现在的订单。