匹配GET参数时,mod_rewrite规则不起作用

时间:2013-06-09 05:07:33

标签: regex apache mod-rewrite

我有这个RewriteRule:

RewriteRule ^wiki/search[.php]*?q=(.*)$ /wiki/search/$1 [R]

尝试将格式/ wiki / search?q = search_query重写为/ wiki / search / search_query,然后使用

重写
RewriteRule ^wiki/search/(.*)$ /wikisearch.php?id=$1 [L]

然而..只要我在第一条规则中有?q=它就行不通,而只是让我有404错误。 :(
为什么是这样?我可以不在重写规则中使用GET参数吗?

1 个答案:

答案 0 :(得分:1)

尽可能read in the docsRewriteRule仅适用于“网址路径”,不包括查询字符串:

  

在第一个RewriteRule上,它与请求的(%-decoded)URL路径(或文件路径,具体取决于上下文)进行匹配。后续模式与最后匹配的RewriteRule的输出匹配。

要匹配查询字符串,您可以使用RewriteCond,然后使用%0%1 ... %9引用以下重写规则中的匹配和组

RewriteCond %{QUERY_STRING} \bq=([^&]+)
RewriteRule ^wiki/search(?:\.php)?$ /wiki/search/%1

另一方面,你正在做的事情看起来很丑陋,我建议你避免这种无用的外部重定向([R])。在没有外部重定向的情况下重写为所需的URL,或者更好地处理应用程序/脚本中的所有查询字符串修改。