Redirect 使用mod_rewrite重定向查询字符串(反之亦然)

Redirect 使用mod_rewrite重定向查询字符串(反之亦然),redirect,mod-rewrite,get,Redirect,Mod Rewrite,Get,假设我有带有查询字符串的URL,即: /DesignPatterns 使用mod_rewrite,如何将它们重定向到: /index.php?book=DesignPatterns 以下是正确的吗 RewriteCond %{QUERY_STRING} (\w+) RewriteRule ^index.php?book=%1? [L,R=301] PS:最初的问题是:如何将查询字符串变量与mod_rewrite匹配?(2月12日至10日,帕特里克·麦克尔哈尼,我请求得到他的许可)完整的解

假设我有带有查询字符串的URL,即:
/DesignPatterns

使用mod_rewrite,如何将它们重定向到:
/index.php?book=DesignPatterns

以下是正确的吗

 RewriteCond %{QUERY_STRING} (\w+) 
 RewriteRule ^index.php?book=%1? [L,R=301]

PS:最初的问题是:如何将查询字符串变量与mod_rewrite匹配?(2月12日至10日,帕特里克·麦克尔哈尼,我请求得到他的许可)

完整的解决方案是

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+) index.php?search=$1 [L]

您的
规则
很好,但行
RewriteRule^index.php?book=%1中有小的打字错误?[L,R=301]
。在
^
/index.php?book=%1
之间添加一个空格,否则将出现500 syntex错误。此外,您的正则表达式捕获组
(\w+)
捕获有限的字符(仅限alpha numbric)。如果您的查询字符串包含任何uri字符,请将其更改为
(.+)
。因此它将是:RewriteCond%{QUERY_STRING}(+)RewriteRule^/index.php?搜索=%1?[L,R=301]顺便说一句,我试图澄清搜索机器人在以前提交的“旧”网站地图和最近提交的“新”网站地图之间的任何混淆,否则,尽管我更改了网站地图,他们仍会向我发送404条消息。显然,他们仍然保留了以前的旧版本,尽管我已经做了几个月的更改。“URL带有查询字符串,即:
/DesignPatterns
”-这有点令人困惑,因为它“看起来不像”查询字符串。最好发布整个请求URL。(或者可能这就是整个请求URL,而这毕竟不是一个查询字符串?)。否则,这意味着您的URL格式为
example.com/foo?/DesignPatterns
。但这与向上投票和赏金分配的答案相矛盾,这表明发布的URL片段实际上是URL路径,而不是查询字符串?