有没有一种很好的方式来查看到Apache的传入请求的详细版本? 至less我想检查一个特定的头的存在,并检查其值。 请求不是来自浏览器,所以要查看它们是很困难的。 我不知道我的自定义HTTP头实际上是由客户端添加,所以debugging我的rewritecond指令是困难的。
您可以创build一个包含标题的自定义LogFormat :
%{Foobar} i:发送到服务器的请求中Foobar:标题行的内容。 其他模块(例如mod_headers)所做的更改会影响到这一点。 如果您对大多数模块修改之前的请求头有兴趣,可以使用mod_setenvif将头复制到内部环境variables中,并使用上述的%{VARNAME} elogging该值。
然后在你的AccessLog指令中重用这个LogFormat
LogFormat "%v %h %l %u %t \"%r\" %>s %b %{MySpecialHeader}i " my_special_format CustomLog logs/access_log_with_details my_special_format
甚至只在一行中:
CustomLog logs/access_log_with_details "%v %h %l %u %t \"%r\" %>s %b %{MySpecialHeader}i"
更新 :
有关SetEnvIf的说明:
这部分是为了在任何内部重写开始时存储Header的值,然后在过程结束时使用%{FOO}i语法来提取头部,而不是使用%{MyEnvVar}e在开始时logging备份的值,这是logging环境variables的语法。
所以以这样的结局结束:
SetEnvIf MySpecialHeader "(.*)" BACKUPHEADER=$1 (... stuff and things ...) CustomLog logs/access_log_with_details "init: %{BACKUPHEADER}e final: %{MySpecialHeader}i "
你也可以用mod_security来做:
http://static.askapache.com/httpd/mod_security/doc/modsecurity-manual.html#N107EE
LogFormat "%h %l %u %t \"%r\" %>s %{mod_security-body}n