Mod Rewrite如何与日志交互

时间:2014-09-11 22:38:25

标签: php apache cakephp mod-rewrite logging

我正在使用CakePHP,而我并不了解mod_rewrite如何影响自定义日志。

.htaccess

RewriteRule ^(.*)$ index.php?url=$1 [QSA,L,NE]

(index.php是CakePHP开始路由请求的地方)

然后在/etc/apache2/apache2.conf

  LogFormat "%U %q" custom

  CustomLog "/var/log/apache/custom.log" custom

但是对于一个请求/ foo?bar = 1,我看到了

/foo ?url=foo&bar=1

我不明白发生了什么。

似乎日志发生在使用%U重写之前,但 AFTER 使用%q重写。这是预期的行为吗?我可以改变吗? (我的日志大小有严格限制,每次路径记录两次都是不可取的。)

2 个答案:

答案 0 :(得分:0)

我不确定Apache在这里做了什么,但我可以在不使用查询字符串的情况下使CakePHP正常工作:

RewriteRule ^(.*)$ index.php [QSA,L,NE,E=URL:$1]

然后在index.php

$_GET['url'] = substr(getenv('REDIRECT_URL'), 1);

无论如何,这似乎比普通的CakePHP方式要少得多。

答案 1 :(得分:0)

这不是查看mod_rewrite正在做什么的方法;你需要看看重写过程中发生了什么。您需要启用重写日志才能准确地查看其中发生的情况:

代码是:

RewriteLog "/usr/local/var/apache/logs/rewrite.log"

考虑到你已经启用了重写模块,你需要重新启动apache。这将帮助您进行调试。此外,您必须将其放入虚拟主机条目中。