这个apache重写意味着什么?

时间:2018-01-22 06:46:10

标签: apache mod-rewrite url-rewriting

RewriteCond %{QUERY_STRING}    (.*)\?mem=stats$
RewriteRule  ^/(.*)$           http://X.X.X.X/$1?%1 [P,L]

如果请求为/asdf?mem=stats,是否会重写为/asdf?mem=stats?asdf

因为$1asdf?mem=stats%1asdf ???

1 个答案:

答案 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'