在一个htaccess文件的重写规则正确的顺序
-
12-09-2019 - |
题
我需要有:
http://www.example.com/v1/my-project/一>重定向到 http://example.com/my-project/
这样:
(1)从HTTP_HOST
除去在WWWRewriteCond %{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)I也希望将所有404重定向到主页。
ErrorDocument 404 /
(4)最后,我的所有文件实际上存在于哪些主机当前活动网站“V2 /”文件夹中,但我不希望在网址“V2”,只是“/”
RewriteCond %{REQUEST_URI} !^/v2/ [NC]
RewriteRule ^(.*)$ /v2/$1 [NC,L]
所以,这里是我的规则。我的问题是:我不管理(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]
其他提示
您应该先写,是造成外部重定向(R
标志),然后将其它规则的任何规则。否则,可用于外部重定向尽管它只是用于内部重定向已重写网址。
所以我不会改变你现在所拥有的顺序。
不隶属于 StackOverflow