如何debuggingApache mod_rewrite
我有两个与mod_rewrite的主要问题:
1)当我有一个无效的规则时没有报告有意义的错误
2)要可靠地testing每个修改,我必须擦除Chrome的caching。 这不是火箭科学,但我必须按Ctrl + Shift + Delete,然后单击确定,然后closures窗口,然后重新加载。
我想看看是否有任何专家愿意分享他们的秘密,有效地pipe理mod_rewrite代码。
一个窍门是打开重写日志。 要打开它,请尝试在您的apache主configuration或当前虚拟主机文件( 不在 .htaccess
)这些行:
RewriteEngine On RewriteLog "/var/log/apache2/rewrite.log" RewriteLogLevel 3
由于Apache httpd 2.4 mod_rewrite RewriteLog和RewriteLogLevel指令已经被新的每个模块日志configuration完全替代。
LogLevel alert rewrite:trace6
Ben提到的LogRewrite指令在Apache 2.4中不再可用。 您需要使用LogLevel指令。 例如
LogLevel alert rewrite:trace6
请参阅http://httpd.apache.org/docs/2.4/mod/mod_rewrite.html#logging
对于基本的URLparsing,请使用像wget
或curl
这样的命令行抓取工具来进行testing,而不是手动浏览器。 那么你不必清除任何caching; 只需向上箭头,然后在shell中input以重新运行testing提取。
有htaccesstesting器 。
它显示哪些条件testing了某个URL,哪些符合条件,哪些规则被执行。
这似乎有一些小故障,但。
根据Ben的回答 ,你可以在Linux上运行apache(在我的情况下是Debian)执行以下操作。
首先创build文件rewrite-log.load
/etc/apache2/mods-availabe/rewrite-log.load
RewriteLog "/var/log/apache2/rewrite.log" RewriteLogLevel 3
然后input
$ a2enmod rewrite-log
其次是
$ service apache2 restart
当你完成debugging你的重写规则
$ a2dismod rewrite-log && service apache2 restart