0

我有这个重写规则:

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参数吗?

4

1 回答 1

1

正如您在文档中看到的那样RewriteRule仅适用于“URL-path”,不包括查询字符串:

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

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

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

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

于 2013-06-09T08:02:05.460 回答