鉴于以下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中的规则