我有一些内容仅供通过 GeoIP 查找并与某些国家/地区匹配的人使用。这是由 mod_rewrite 完成的,一切正常。
我想做的是记录失败的尝试,以帮助调试应该能够获取此内容但不能获取的人。目前,为了做到这一点,我需要将 RewriteLogLevel 设置为 4,这意味着记录虚拟主机上的所有内容,而不仅仅是我限制的内容。
这是 mod_geoip 自述文件中的示例:
GeoIPEnable On
GeoIPDBFile /path/to/GeoIP.dat
RewriteEngine on
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^CA$
RewriteRule \.(gif|jpg|png|css)$ - [L] # don't redirect images and stylesheets
RewriteRule ^(.*)$ http://www.canada.com [L] # redirect everything else
我想添加类似的东西
WriteThisToLog "Denied access to $1 from IP $2 due to calculated country $3"
变量都在那里 - 有没有可以用来写出 Apache 错误日志的指令?
编辑:我会把它放在正确答案的评论中,但格式很重要。我结束了这个:
RewriteRule ^(.*)$ http://www.canada.com [L,E=GEOIP_FAIL:1] # redirect everything else
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" GEOIP_COUNTRY_CODE=%{GEOIP_COUNTRY_CODE}e" geoip_fail_format
CustomLog /var/log/httpd/geoip_fail_log geoip_fail_format env=GEOIP_FAIL
有一个名为mod_log_config的模块,其中包含名为CustomLog和LogFormat的指令。基本上我们使用 LogFormat 定义输出格式并将其重定向到 CustomLog 中提到的文件。