我使用mod_rewrite存在两个主要问题:
1)我的规则无效时,没有报告有意义的错误
2)为了可靠地测试每个修改,我必须清除chrome的缓存。这不是火箭科学,但我必须按Ctrl + Shift + Delete,然后单击“确定”,然后关闭窗口并重新加载。
我想看看是否有任何大师愿意分享他们的秘密,以有效地管理mod_rewrite代码。
我使用mod_rewrite存在两个主要问题:
1)我的规则无效时,没有报告有意义的错误
2)为了可靠地测试每个修改,我必须清除chrome的缓存。这不是火箭科学,但我必须按Ctrl + Shift + Delete,然后单击“确定”,然后关闭窗口并重新加载。
我想看看是否有任何大师愿意分享他们的秘密,以有效地管理mod_rewrite代码。
Answers:
一种技巧是打开重写日志。要打开它,请在您的apache主配置或当前虚拟主机文件(不在中.htaccess
)中尝试以下行:
RewriteEngine On
RewriteLog "/var/log/apache2/rewrite.log"
RewriteLogLevel 3
从Apache httpd 2.4 mod_rewrite开始, RewriteLog和RewriteLogLevel伪指令已被新的按模块记录配置完全取代。
LogLevel alert rewrite:trace6
RewriteEngine On
部分中设置该部分,因为如果仅在.htaccess
文件中启用它(就像我一样),那么将不会记录任何内容。
Ben提到的LogRewrite指令在Apache 2.4中不再可用。您需要改用LogLevel指令。例如
LogLevel alert rewrite:trace6
参见http://httpd.apache.org/docs/2.4/mod/mod_rewrite.html#logging
tail -f error_log|fgrep '[rewrite:'
AllowOverride
设置为All
!
对于基本的URL解析,请使用类似wget
或的命令行提取程序curl
进行测试,而不是使用手动浏览器。然后,您不必清除任何缓存;只需向上箭头,然后在shell中输入即可重新运行您的测试抓取。
根据Ben的回答,您可以在Linux上运行apache时执行以下操作(在我的情况下为Debian)。
首先创建文件rewrite-log.load
/etc/apache2/mods-availabe/rewrite-log.load
RewriteLog "/var/log/apache2/rewrite.log"
RewriteLogLevel 3
然后输入
$ a2enmod重写日志
其次是
$ service apache2重新启动
当您调试完重写规则后
$ a2dismod rewrite-log &&服务apache2重新启动
LogLevel warn rewrite:trace8
或LogLevel info rewrite:trace8
8可以是1-8中的任何数字