.htaccess 为什么重写规则只在我更改行位置时才起作用?

.htaccess 为什么重写规则只在我更改行位置时才起作用?,.htaccess,mod-rewrite,.htaccess,Mod Rewrite,我的.htaccess文件中有以下几行: RewriteCond %{QUERY_STRING} id=([0-9]+) RewriteRule ^page/([0-9]+)/$ ?page=$1 [L] RewriteRule ^(20\d\d)/page/([0-9]+)/$ ?yearMeasure=$1&page=$2 [L] RewriteRule ^(20\d\d)/$ ?yearMeasure=$1 [L] RewriteRule ^category/([A-Za-z0-9

我的.htaccess文件中有以下几行:

RewriteCond %{QUERY_STRING} id=([0-9]+)
RewriteRule ^page/([0-9]+)/$ ?page=$1 [L]
RewriteRule ^(20\d\d)/page/([0-9]+)/$ ?yearMeasure=$1&page=$2 [L]
RewriteRule ^(20\d\d)/$ ?yearMeasure=$1 [L]
RewriteRule ^category/([A-Za-z0-9-]+)/page/([0-9]+)/$ ?category=$1&page=$2 [L]
RewriteRule ^category/([A-Za-z0-9-]+)/$ ?category=$1 [L]
RewriteRule ^(20\d\d)/([A-Za-z0-9-]+)/$ ?type=post&year=$1&title=$2 [L,QSA]
当文件保持上述状态时,服务器不会捕获/page/1/。相反,它返回404错误。然而,当我翻转第二行和第三行时,一切都很完美。为什么会这样

RewriteCond %{QUERY_STRING} id=([0-9]+)
RewriteRule ^(20\d\d)/page/([0-9]+)/$ ?yearMeasure=$1&page=$2 [L]
RewriteRule ^page/([0-9]+)/$ ?page=$1 [L]
RewriteRule ^(20\d\d)/$ ?yearMeasure=$1 [L]
RewriteRule ^category/([A-Za-z0-9-]+)/page/([0-9]+)/$ ?category=$1&page=$2 [L]
RewriteRule ^category/([A-Za-z0-9-]+)/$ ?category=$1 [L]
RewriteRule ^(20\d\d)/([A-Za-z0-9-]+)/$ ?type=post&year=$1&title=$2 [L,QSA]
编辑:

经过几分钟的实验,似乎直接在
RewriteCond%{QUERY_STRING}id=([0-9]+)
后面的那行代码无效

感谢您的帮助。

任何帮助都属于紧随其后的
重写规则

RewriteCond指令定义了一个规则条件。一个或多个RewriteCond可以位于RewriteRule指令之前。只有当URI的当前状态与其模式匹配并且满足这些条件时,才使用以下规则

所以在这种情况下,条件1属于规则2,条件3属于规则4,最后规则5根本没有条件


这意味着,当你

1. RewriteCond ...
2. RewriteRule ...
3. RewriteRule ...
以及切换规则2和3

1. RewriteCond ...
3. RewriteRule ...
2. RewriteRule ...
该条件属于其他规则


当您使用第一组规则并请求
/page/1/?id=5
时,它会起作用,因为现在满足了前面的条件“
QUERY\u STRING
匹配
id=([0-9]+)
”。

任何都属于紧跟它的
重写规则

RewriteCond指令定义了一个规则条件。一个或多个RewriteCond可以位于RewriteRule指令之前。只有当URI的当前状态与其模式匹配并且满足这些条件时,才使用以下规则

所以在这种情况下,条件1属于规则2,条件3属于规则4,最后规则5根本没有条件


这意味着,当你

1. RewriteCond ...
2. RewriteRule ...
3. RewriteRule ...
以及切换规则2和3

1. RewriteCond ...
3. RewriteRule ...
2. RewriteRule ...
该条件属于其他规则


当您使用第一组规则并请求
/page/1/?id=5
时,它将起作用,因为现在满足了前面的条件“
QUERY\u STRING
匹配
id=([0-9]+)