1

我需要:

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/”文件夹中,但我不想在 url 中出现“v2”,只需要“/”

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

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

4

2 回答 2

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]
于 2009-07-10T11:25:35.547 回答
0

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

所以我不会改变你现在的顺序。

于 2009-07-10T12:31:08.190 回答