最后一次捕获 - 所有Mod_Rewrite优先于先前的规则

时间:2014-04-02 21:35:22

标签: php apache .htaccess mod-rewrite

我的.htaccess文件遇到了一些困难,我似乎无法理解。根据{{​​3}}它应该像我期望的那样工作,但事实并非如此。我的前两个规则仅在我的最后一条规则被注释掉时才有效。一旦我添加了最后一条规则,就好像前两条规则不再重要。请指教。 (我知道一个未版本化的api端点是不明智的,但我现在需要兼容性。)

RewriteRule beta api.v2.php [QSA,L]

RewriteRule v1/(.*)$ api.v1.php?request=$1 [QSA,NC,L]
#current default api version
RewriteRule (.*)$ api.v1.php?request=$1 [QSA,NC,L]

使用此htaccess domain.dev/beta/endpoint将转到api.v1.php而不是api.v2.php(使用htaccess tester)但是一旦删除了最后一行,它会按预期转到v2。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

根据您发布的htaccess,重写似乎是:beta - > api.v2.php - > api.v1.php

建议:在重写规则上设置条件,并在最后一个上明确检查api.v2.php

RewriteCond %{REQUEST_URI} ^/beta
RewriteRule beta api.v2.php [L,QSA]

RewriteCond %{REQUEST_URI} ^/v1
RewriteRule v1\/(.*)$ /api.v1.php?request=$1 [QSA,NC,L]

# make sure not to rewrite valid api requests (api.v2.php) to default version
RewriteCond %{REQUEST_URI} !^\/api
RewriteRule ^(.*)$ api.v1.php?request=$1 [QSA,NC,L]
相关问题