Apache 为什么mod重写规则A工作而不是B?

Apache 为什么mod重写规则A工作而不是B?,apache,.htaccess,mod-rewrite,redirect,rule,Apache,.htaccess,Mod Rewrite,Redirect,Rule,这可以工作,如重定向: RewriteCond %{QUERY_STRING} _escaped_fragment_=([^&]+) RewriteRule ^.*$ system/snapshot.php?project=%1 …但事实并非如此(请注意删除^和$锚定): 有人能解释为什么我必须锚定到URL路径的开始和结束部分吗 因为查询字符串对于这个规则很重要,而不是路径,所以我想我可以说“不管路径包含什么,都运行这个规则”,因此* 提前感谢。尝试将*更改为(.*)?您如何知道第二条

这可以工作,如重定向:

RewriteCond %{QUERY_STRING} _escaped_fragment_=([^&]+)
RewriteRule ^.*$ system/snapshot.php?project=%1
…但事实并非如此(请注意删除
^
$
锚定):

有人能解释为什么我必须锚定到URL路径的开始和结束部分吗

因为查询字符串对于这个规则很重要,而不是路径,所以我想我可以说“不管路径包含什么,都运行这个规则”,因此
*


提前感谢。

尝试将
*
更改为
(.*)
?您如何知道第二条规则不起作用?@anubhava-正如我所说,它不会重定向。规则只是(内部)重写,这里没有重定向。我意识到这一点,但它不会以静默或其他方式重定向到所需页面。正如我在问题中所说,如果我锚定,它会。
RewriteCond %{QUERY_STRING} _escaped_fragment_=([^&]+)
RewriteRule .* system/snapshot.php?project=%1