Apache服务器上的.htaccess文件中RewriteRules的优先级

我的.htaccess文件中有一些RewriteRules。 但是,只有删除了另一个特定的规则才能执行一个特定的规则,而不pipe我如何订购这两个规则。

这是似乎有“低”优先级的规则:

RewriteRule ^([0-9]+)$ /beta/forward.php?id=$1 [L] 

这是总是优先的规则:

 RewriteCond %{HTTP_HOST} ^domain1\.net$ [NC] RewriteRule ^(.*)$ http://domain2.net/$1 [R=301,L] 

domain1和domain2实际上都指向同一个网站。 所以,只要两个规则都在.htaccess文件中,我就可以访问

 http://domain1.net/123 

第二个规则首先执行,我得到两个redirect,首先http://domain2.net/123 ,然后(当主机名不符合第二个规则了)到http://domain2.net/beta/ forward.php?id = 123 。 我已经尝试修复第二条规则,所以它永远不会执行的只包含数字的url,但我一定是做错了,因为它仍然得到执行:

 RewriteCond %{HTTP_HOST} ^ domain1\.net$ [NC] RewriteRule ^(.*[^0-9]+.*)$ http://domain2.net/$1 [R=301,L] 

只有从.htaccess文件中删除两行,我才能得到第一条规则来处理请求。

任何帮助将不胜感激。

你的规则指出了这些程序:

如果url只有数字,请转到testing版url,然后是这些数字并停止。

如果您访问domain1,请转到domain2的相同URL并停止。

遇到L或规则完成时,处理结束。 发生的任何事情都是来自浏览器的新连接。 这可能是你的混淆 – 顺序重要,然后是比赛。 L应该照顾你有的时候的问题:

RewriteEngine on

RewriteRule ^([0-9]+)$ /beta/forward.php?id=$1 [L] #处理结束[L]如果它只是数字

RewriteCond %{HTTP_HOST} ^domain1\.net$ [NC] #如果domain1.net不区分大小写匹配…

RewriteRule ^(.*)$ http://domain2.net/$1 [R=301,L] #redirect到domain2.net。 结束[L]

我认为你应该检查重写规则( http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewriterule )的标志,注意C和L标志的作用。