我需要:
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)我猜。我认为我的规则的顺序必定是错误的但我似乎无法做到正确。可以你帮忙吗?
答案 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可以用于外部重定向,尽管它只是用于内部重定向。
所以我不会改变你现在的订单。