【问题标题】:right order of rewrite rules in an htaccess filehtaccess 文件中重写规则的正确顺序
【发布时间】:2010-11-09 16:31:22
【问题描述】:

我需要:

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)。我认为我的规则的顺序一定是错误的,但我似乎无法做到正确。可以你帮忙?

【问题讨论】:

    标签: .htaccess mod-rewrite errordocument


    【解决方案1】:

    “规则 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]
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-30
        • 2015-12-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多