我如何知道RewriteRule正在testing什么?

鉴于以下Apache重写规则:

RewriteRule .* foo 

…我怎么找出究竟是什么string*正在testing反对? 假设在这一点之前可以应用任意数量的任意重写规则,并且我无法知道它们是什么(假定httpd.conf对我来说是隐藏的)。

编辑:谢谢,但请记住,我没有访问编辑(甚至读!)httpd.conf。 我只有.htaccess文件在我的处置。

编辑 :删除需要httpd.conf访问的解决scheme

这将工作,只是把你的重写规则之前:

 RewriteRule (.*) - [ENV=MYREWRITERULETEST:$1] 

然后在.ssi或.cgi文件中输出该variables。

试图查看其他variables不一定会告诉你你的规则是什么匹配的; 他们会告诉你什么是在任何重写规则运行之前匹配的,或者在所有重写规则运行之后看起来像什么东西。

mod_rewrite使用正则expression式来标识一个特定的string,然后重写与给定的replace匹配。 以你的例子为例:

RewriteRule .* foo

mod_rewrite会匹配任何字符(这就是“。”所代表的意思),重复的次数也就是“*”。 现在,由于“*”正在重复“。”,这意味着要将任何string与任何组合和长度的任何字符匹配。 那么,它将用“foo”取代那个大的,长的任何东西。

所以要使用mod_rewrite,你至less需要对正则expression式有一个基本的了解,并且要充分理解你想要匹配什么,并将其重写为。

我经常使用像Reggy或Kiki这样的小程序来帮助我布置正则expression式。 你也可能会觉得这很有帮助。

我希望这有帮助。

如果你有权访问httpd.conf,这个答案描述了如何打开mod_rewrite的日志logging,这将给你正是你想要的。

如果您有权访问正在提供的文件系统中的.htaccess文件,则可以在此更改configuration以激活日志logging。

否则,反复试验可能是你最好的select!

我知道这是IIS中的头文件,我不知道Apache,但是头文件UNENCODED_URL或HTTP_URL可能会给你服务器端URL,如果你在你的服务器端脚本(ASP / PHP /无论)中查询它。

然后,您可以使用它来回溯.htaccess中的规则