使用apache+;修改-可能吗?

使用apache+;修改-可能吗?,apache,mod-rewrite,logging,Apache,Mod Rewrite,Logging,我们有很多修改规则 这些是简单的URI+GeoIP大陆=R=302,L规则 他们工作得很好。我们已经在不同的大陆上使用盒子进行了测试,一切都按预期进行 我们想添加一个最终的规则,该规则仅为不符合任何“上述”规则的请求启用访问日志,但允许按请求完成请求。只是为了让我们能够更清楚地了解是什么让它通过所有未重定向的规则 是否可以使用apache2+mod_重写 我们是如何做到这一点的,正如雷吉勒罗的回答所述(功劳全在他): (一) 在重写规则的末尾,我们添加了一个规则,该规则对于我们想要记录的特定文

我们有很多修改规则

这些是简单的URI+GeoIP大陆=R=302,L规则

他们工作得很好。我们已经在不同的大陆上使用盒子进行了测试,一切都按预期进行

我们想添加一个最终的规则,该规则仅为不符合任何“上述”规则的请求启用访问日志,但允许按请求完成请求。只是为了让我们能够更清楚地了解是什么让它通过所有未重定向的规则

是否可以使用apache2+mod_重写


我们是如何做到这一点的,正如雷吉勒罗的回答所述(功劳全在他):

(一)

在重写规则的末尾,我们添加了一个规则,该规则对于我们想要记录的特定文件来说是一个包罗万象的规则。我们使用了regilero所说的E=envname:value

RewriteRule ^filename.ext$ filename.ext [L,E=logme:true]
(二)

然后,我们添加了以下customlog条目

CustomLog /var/log/httpd/your_custom_log.log "%v:%p | %r | %{User-agent}i" env=logme
如您所见,env=logme。基本上就是说,如果设置了变量logme,那么customlog就会关闭它

上面的customlog非常简单,我们只想知道服务器:port | requested url | useragent。您可以使用中的“自定义日志格式”根据需要进行更改

(三)

通过以上内容,我们可以通过稍微复杂的(useragent+geoip)重写规则找出是什么(如果有的话)造成了这种情况,并根据这些信息采取相应的行动

最后一点:虽然我们没有做任何真正的实证测试,但我确信这些“一概而论”的重写规则相当繁重。因此,理想情况下,您只希望将此作为一种决策工具,并在确定正确的行动方案后关闭它们。虽然我相信这一切都取决于你的网站有多忙;)



这是非常有用的。使用此方法,您可以记录各种活动。再次衷心感谢雷吉勒罗。我们将全面使用它。

您可以使用mod_rewrite在最后一个catch all规则(对于那些不匹配任何geoIp规则的规则)上设置一个环境变量,标记为
[E=myspecialenvname:1]
,您可以在其他匹配情况下,在使用
[E=!myspecialenvname]的特定多循环进程的情况下,取消设置此变量
关于其他规则

那你就得根据那个env来登录了。如果选中,您将看到语法为:

CustomLog file|pipe format|nickname [env=[!]environment-variable]
第三个参数是可选的,根据服务器环境中是否存在特定变量来控制是否记录特定请求。如果为请求设置了指定的环境变量(或在'env=!name'子句的情况下未设置),则将记录请求

所以你必须写一些类似的东西:

CustomLog path/to/unmatched-geoip.log "%h %l %a %A %t \"%r\" %>s %b" env=myspecialenvname

呵呵,刚刚在我们的开发服务器上测试过。工作完全符合预期。这很酷。非常感谢!