我正在使用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
重写。这是预期的行为吗?我可以改变吗? (我的日志大小有严格限制,每次路径记录两次都是不可取的。)
答案 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。这将帮助您进行调试。此外,您必须将其放入虚拟主机条目中。