.htaccess规则顺序

时间:2012-06-14 14:46:50

标签: apache .htaccess mod-rewrite

我有一个令我困惑的问题。我的.htaccess文件中有两个规则,其中一个应该处理一个url路径的请求,另一个应该再次检查另一个路径。第二条规则比第一条更普遍。我期待第一个捕获它的实例和[L]停止规则处理,但一切都落到第二个规则并被定向到错误的页面。是否应该在适用的情况下应用第一条规则,然后停止规则处理?

以下是出现的两条规则:

## Path 1 ##
RewriteCond %{REQUEST_URI} ^directory/.*-([0-9]+)/?$
RewriteRule ^directory/.*-([0-9]+)/?$ directory/page.php?id=$1 [L]

## Path 2 ##
RewriteCond %{REQUEST_URI} ^.*-([0-9]+)/?$
RewriteRule ^.*-([0-9]+)/$ page.php?id=$1 [L]

也许我错过了一些明显的东西,但正如我所理解的那样,第一条规则(如果满足条件)将被应用,然后规则处理就会停止。

非常感谢任何帮助。

谢谢

1 个答案:

答案 0 :(得分:2)

您实际上不需要RewriteCond指令,因为RewriteRule模式已经暗示了它们。这适用于我的测试:

## Path 1 ##
RewriteRule ^directory/.*-([0-9]+)/?$ /directory/page.php?id=$1 [L]

## Path 2 ##
RewriteRule ^.*-([0-9]+)/$ /page.php?id=$1 [L]

如果由于某种原因你还需要RewriteCond指令,请记住%{REQUEST_URI}实际上以斜杠开头,你必须匹配它。