如何调试 Apache mod_rewrite

我有两个主要的问题与mod_rewrite:

  1. 当我有一个无效的规则时没有报告有意义的错误

    Enter image description here

  2. 为了可靠地测试每个修改,我必须擦除谷歌Chrome的缓存。这不是火箭科学,但我必须点击Ctrl + 转变 + 删除,单击好吧,并关闭窗口,并重新加载。

我想看看是否有专家愿意分享他们有效管理mod_rewrite代码的秘诀。

225015 次浏览

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

LogLevel alert rewrite:trace6

在Apache HTTPD 2.4 mod_rewrite之前,这样的每个模块日志记录配置还不存在。相反,你可以使用以下日志设置:

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

对于基本的URL解析,使用命令行获取器(如wgetcurl)来进行测试,而不是手动浏览器。这样你就不需要清空缓存;只需要向上箭头键并在shell中按输入就可以重新运行测试取回。

RewriteLog指令Ben提到的在Apache 2.4中不再可用。

您需要使用LogLevel指令。例如,

LogLevel alert rewrite:trace6

看到Apache Module mod_rewrite, Logging

基于本的回答,你可以在Linux(在我的例子中是Debian)上运行Apache时执行以下操作。

首先创建文件rewrite-log.load

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

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

然后输入

$ a2enmod重写日志

紧随其后的是

$ service apache2 restart

当您完成调试重写规则时,

$ a2dismod重写日志&&Service apache2 restart

这是htaccess测试仪

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

不过,它似乎有一些故障。