Mod rewrite mod rewrite规则执行无序

Mod rewrite mod rewrite规则执行无序,mod-rewrite,Mod Rewrite,好的,我的vhost块中有两个单独的mod重写规则。如果客户通过example.com/1234.html等附属URL进入,第一条规则将其重定向到异地,第二条规则强制URL始终包含www.example.com等www.dot # Affiliate Links RewriteRule ^([0-9]+)\.html$ http://affiliates.example.com/log.php?id=$1 [R=302,L] # Ensure we are always on www dot

好的,我的vhost块中有两个单独的mod重写规则。如果客户通过example.com/1234.html等附属URL进入,第一条规则将其重定向到异地,第二条规则强制URL始终包含www.example.com等www.dot

# Affiliate Links
RewriteRule ^([0-9]+)\.html$ http://affiliates.example.com/log.php?id=$1 [R=302,L]

# Ensure we are always on www dot
RewriteCond %{HTTP_HOST} ^example\.loc [NC]
RewriteRule (.*) http://www.example.com$1 [R=301,L]

规则本身非常有效。问题是,如果第一条规则适用,我希望它立即重定向,但是第二条规则似乎被提升到顶部,因为它总是优先。我需要更改什么才能使它们按顺序执行?

您已经声明这在vhost块中。在该上下文中(例如,与.htaccess文件相反),URL总是以“/”开头

因此

应该是

 RewriteRule ^/([0-9]+)\.html$ http://affiliates.example.com/log.php?id=$1 [R=302,L]

(即,使用前导斜杠),否则它将永远不会匹配任何内容。

请先尝试清除浏览器缓存。我假设这里的规则是在你的部分中,你的apache配置文件!?如果您只是交换它们会发生什么?它们在virtualhost块中,每次修改后我都会重新启动apache,并打开一个新的私有浏览会话进行测试。它们当前处于我希望它们执行的顺序,但切换它们不会改变行为。谢谢你的评论!
 RewriteRule ^/([0-9]+)\.html$ http://affiliates.example.com/log.php?id=$1 [R=302,L]