如何调试Apache mod_rewrite

时间:2012-03-09 10:54:43

标签: apache mod-rewrite

mod_rewrite有两个主要问题:

1)当我的规则无效时,报告没有有意义的错误

enter image description here

2)为了可靠地测试每个修改,我必须擦除chrome的缓存。这不是火箭科学,但我必须按Ctrl + Shift + Delete然后单击确定,然后关闭窗口,然后重新加载。

我想看看是否有任何大师愿意分享他们的秘密来有效管理mod_rewrite代码。

5 个答案:

答案 0 :(得分:254)

一个技巧是打开重写日志。要打开它,请在apache主配置或当前虚拟主机文件中尝试以下这些行(不是.htaccess中):

RewriteEngine On
RewriteLog "/var/log/apache2/rewrite.log"
RewriteLogLevel 3

由于Apache httpd 2.4 mod_rewrite RewriteLog和RewriteLogLevel指令已完全被新的每模块日志记录配置所取代。

LogLevel alert rewrite:trace6

答案 1 :(得分:117)

Ben提到的LogRewrite指令在Apache 2.4中不再可用。 您需要使用LogLevel指令。 E.g。

LogLevel alert rewrite:trace6

请参阅http://httpd.apache.org/docs/2.4/mod/mod_rewrite.html#logging

答案 2 :(得分:23)

对于基本URL解析,请使用命令行提取程序(如wgetcurl)进行测试,而不是手动浏览器。然后你不必清除任何缓存;只需向上箭头并在shell中输入即可重新运行测试提取。

答案 3 :(得分:10)

htaccess tester

它显示了针对某个URL测试了哪些条件,哪些条件符合标准以及哪些规则已执行。

但是,似乎有一些小问题。

答案 4 :(得分:3)

基于Ben's answer,您可以在Linux上运行apache时执行以下操作(在我的情况下是Debian)。

首先创建文件rewrite-log.load

/etc/apache2/mods-availabe/rewrite-log.load

RewriteLog "/var/log/apache2/rewrite.log"
RewriteLogLevel 3

然后输入

  

$ a2enmod rewrite-log

接着是

  

$ service apache2 restart

当你完成重写规则时

  

$ a2dismod rewrite-log&& service apache2 restart