我有一些内容只有通过 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
答案1
有一个名为的模块mod_log_config其中有指令称为自定义日志和日志格式. 基本上我们使用 LogFormat 定义输出格式并将其重定向到 CustomLog 中提到的文件。