我的.htaccess文件中有以下几行:
sh 'cat chef-policy-release.log | grep <file> | tail -n 1 | grep -o "Executed at.*" > Y'
当文件如上所述时,服务器不会捕获/ page / 1 /。相反,它返回404错误。但是,当我翻转第二行和第三行时,一切都很完美。这是为什么?
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]
修改
经过几分钟的实验后,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]
之后直接出现的行似乎无效。
感谢任何帮助。
答案 0 :(得分:0)
任何RewriteCond
都属于紧随其后的RewriteRule
RewriteCond指令定义规则条件。一个或多个RewriteCond可以在RewriteRule指令之前。只有当URI的当前状态与其模式匹配时,以及满足这些条件时,才会使用以下规则。
1. RewriteCond ...
2. RewriteRule ...
3. RewriteCond ...
4. RewriteRule ...
5. RewriteRule ...
因此,在这种情况下,条件1属于规则2,条件3属于规则4,最后规则5根本没有条件。
这意味着,当你有
时1. RewriteCond ...
2. RewriteRule ...
3. RewriteRule ...
并切换规则2和3,
1. RewriteCond ...
3. RewriteRule ...
2. RewriteRule ...
该条件属于另一条规则。
当您使用第一组规则并请求/page/1/?id=5
时,它会起作用,因为现在前面的条件&#34; QUERY_STRING
匹配id=([0-9]+)
&#34;满足了。