我有一些不同的mod-rewrite规则可以工作,但最后一个拒绝将3个参数传递给我的脚本(index.php)
我确实得到p=value
,但id
,rid
和chk
变量甚至没有定义......
网址可能如下所示。 。 。
http://www.domain.com/pagename.htm?id=29&rid=174&chk=a9cdca614135bbef2fb1f2bedf171f61
规则......
RewriteRule ^/pagename\.htm\?id\=([0-9]+)&rid\=([0-9]+)&chk\=([a-f0-9]{32})$ /index.php?p=pagename&id=$1&rid=$2&chk=$3 [L]
print_r($_REQUEST);
Array ( [p] => pagename )
我根本无法理解为什么这不起作用..
答案 0 :(得分:1)
像@MarcB所说,重写规则不包含查询字符串,你必须使用RewriteCond来检查它。根据您上面的例子,这是适合您的:
RewriteCond %{QUERY_STRING} ^id=([0-9]+)&rid=([0-9]+)&chk=([a-f0-9]{32})$
RewriteRule ^pagename.htm index.php?p=pagename&id=%1&rid=%2&chk=%3 [L]
或者就像我上面所说,您也可以使用QSA
标志,如:
RewriteRule ^(pagename).html index.php?p=$1 [L,QSA]
这会将任何附加的查询字符串附加到index.php,但不会对其进行验证(这应该不会在mod_rewrite中完成)。它还允许您添加其他参数,不需要更改规则以适应它们,并且如果键/值的顺序或大小不同,则不会中断。注意:我在pagename
周围添加了括号,并在重写的网址中使用了匹配$1
。这样更容易更改多个规则的页面名称,因为您不必在两个地方更改它。