如何让 Apache 停止记录我的一些网址

Posted

技术标签:

【中文标题】如何让 Apache 停止记录我的一些网址【英文标题】:How to make Apache stop log some my Urls 【发布时间】:2019-01-14 08:13:40 【问题描述】:

我有一个 Web 应用程序。

对我的应用程序的所有请求都将传递给 Root/index.php。 示例:

1. http://myapp.com/?call=phpfile1.processSomething&param1=x&param2=y
2. http://myapp.com/?call=phpfile2.processSomethingElse
3. http://myapp.com/?call=phpfile3.methodXYZ...

我还有另一个应用程序(WindowServices),它会在我的 WebApp 中调用一些 URL(全天 :v)。当我打开 access.log 时,它是这样的:

[2018-08-07 12:23:43] "GET /?call=phpfile1.processSomething&module=5 HTTP/1.1" 200 16
[2018-08-07 12:23:43] "GET /?call=phpfile2.processSomethingElse&module=2 HTTP/1.1" 200 16
[2018-08-07 12:23:43] "GET /?call=phpfile1.processSomething&module=0 HTTP/1.1" 200 16
[2018-08-07 12:23:43] "GET /?call=phpfile1.processSomething&module=7 HTTP/1.1" 200 16
[2018-08-07 12:23:43] "GET /?call=phpfile2.processSomethingElse&module=4 HTTP/1.1" 200 16
[2018-08-07 12:23:43] "GET /?call=phpfile2.processSomethingElse&module=3 HTTP/1.1" 200 16

而且...access.log 文件会随着时间的推移变成大文件。

所以,我不希望 Apache 记录 URL:

1./?call=phpfile1.processSomething
2./?call=phpfile2.processSomethingElse

我在 vhost 文件中设置了一些配置,如下所示:

<VirtualHost *:80>
    DocumentRoot "D:\MyFolderApp"
   <Directory "D:\MyFolderApp">
         AllowOverride All
         Order allow,deny
         Allow from all
         DirectoryIndex index.php index.html
         Require all granted         
   </Directory>
   ServerName myapp.com
   SetEnvIf Request_URI "^/?call=phpfile1.processSomething" dontlog
   SetEnvIf Request_URI "^/?call=phpfile2.processSomethingElse" dontlog
   LogFormat "%h %l %u %t \"%r\" %>s %b" common
   CustomLog "logs/myapp.com-access.log" common env=!dontlog
</VirtualHost>

但是 Apache 仍然为这些 Url 写日志!!!

所以,任何人帮助我! 谢谢!

【问题讨论】:

SetEnvIf 行中的匹配字符串包含一些需要转义的字符:? -> \?. -> \. 如果这不起作用,请尝试删除" 字符也是如此。 谢谢@Nick!我确实这样做了。 SetEnvIf Request_URI "^/\?call=phpfile1\.processSomething" dontlog但是不行! 您是否尝试打印出Request_URI 以检查它是否具有您匹配的格式/内容? 我使用此链接检查:[link]regex101.com/[link] 和 RegEx:^\/\?call=phpfile1\.processSomething。测试字符串:/?call=phpfile1.processSomething&amp;module=5。没关系! 不,我的意思是你要匹配的字符串是什么;即 print_r(Request_URI)。如果您的正则表达式是正确的,那么它一定是您的输入。 【参考方案1】:

在你的配置SetEnvIf Request_URI "^/?call=phpfile1.processSomething" dontlog中,这一行是格式

SetEnvIf 属性正则表达式环境变量

所以你的正则表达式是 "^/?call=phpfile1.processSomething",其中有特殊字符,如 '?'。转义这些字符并将您的正则表达式更改为^\/\?call=phpfile1\.processSomething(.*) 之类的内容。

记得重新加载你的 apache 配置,重新加载或重启你的 apache 服务器

【讨论】:

【参考方案2】:

感谢尼克和塔伦。我解决了我的问题。 在我的.htaccess 文件中,我添加了一些配置:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^automate/phpfile1/(.*) ?call=phpfile1. processSomething&module=$1
    RewriteRule ^automate/phpfile2/(.*) ?call=phpfile2.processSomethingElse&module=$1
</IfModule>

在我的httpd-vhosts.conf 文件中,我设置如下:

SetEnvIf Request_URI "^/automate/phpfile1/"  dontlog
SetEnvIf Request_URI "^/automate/phpfile2/"  dontlog
CustomLog "logs/myapp.com-access.log" combined  env=!dontlog

所以,apache 没有记录 Uris :D

【讨论】:

以上是关于如何让 Apache 停止记录我的一些网址的主要内容,如果未能解决你的问题,请参考以下文章

求助!在线等答案,关于iframe的。

缩短我的网格 - 存档 - 页面的帖子标题网址

web 中一些网址记录一下

网址在QQ微信被拦截怎么办 怎么样才能让被微信屏蔽的网址正常访问

windows 下如何重启apache

如何让我的服务停止自动发布到 Windows 应用程序事件日志中