我有这个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参数吗?
答案 0 :(得分:1)
尽可能read in the docs,RewriteRule
仅适用于“网址路径”,不包括查询字符串:
在第一个RewriteRule上,它与请求的(%-decoded)URL路径(或文件路径,具体取决于上下文)进行匹配。后续模式与最后匹配的RewriteRule的输出匹配。
要匹配查询字符串,您可以使用RewriteCond
,然后使用%0
和%1
... %9
引用以下重写规则中的匹配和组
RewriteCond %{QUERY_STRING} \bq=([^&]+)
RewriteRule ^wiki/search(?:\.php)?$ /wiki/search/%1
另一方面,你正在做的事情看起来很丑陋,我建议你避免这种无用的外部重定向([R]
)。在没有外部重定向的情况下重写为所需的URL,或者更好地处理应用程序/脚本中的所有查询字符串修改。