RewriteCond %{QUERY_STRING} (.*)\?mem=stats$
RewriteRule ^/(.*)$ http://X.X.X.X/$1?%1 [P,L]
如果请求为/asdf?mem=stats
,是否会重写为/asdf?mem=stats?asdf
?
因为$1
为asdf?mem=stats
且%1
为asdf
???
答案 0 :(得分:0)
%{QUERY_STRING}
变量包含不带前导?
的查询字符串(或之前的任何内容),因此%1
在查询字符串之前永远不会包含部分请求。
如果通过将LogLevel rewrite:trace6
添加到VirtualHost配置来启用mod_rewrite日志记录,您将看到RewriteCond和/asdf?mem=stats
请求的此信息:
... RewriteCond: input='mem=stats' pattern='(.*)\\?mem=stats$' => not-matched
此外,在RewriteRule
中,模式将与主机名和端口之后以及查询字符串之前的URL部分匹配。因此,$1
即使在通配符匹配时也不包含请求的查询字符串部分。您可以在日志中看到:
... applying pattern '^/(.*)$' to uri '/asdf'