如何调试 Apache mod_rewrite

问题描述 投票:0回答:5

mod_rewrite 有两个主要问题:

  1. 当我的规则无效时,不会报告有意义的错误

    Enter image description here

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

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

apache mod-rewrite
5个回答
312
投票

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

not
):

LogLevel alert rewrite:trace6

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

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

156
投票

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

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

LogLevel alert rewrite:trace6
请参阅 

Apache 模块 mod_rewrite、日志记录


31
投票
对于基本 URL 解析,请使用命令行提取器(如

wget

curl
)进行测试,而不是手动浏览器。然后你就不必清除任何缓存;只需在 shell 中按 
向上箭头 并按 Enter 即可重新运行测试获取。


25
投票

htaccess 测试器

它显示了某个 URL 测试了哪些条件、哪些满足条件以及执行了哪些规则。

不过似乎有一些小故障。


4
投票
根据

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

首先创建文件

rewrite-log.load

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

RewriteLog "/var/log/apache2/rewrite.log" RewriteLogLevel 3
然后输入

$ a2enmod 重写日志

随后

$ 重启 apache2 服务

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

$ a2dismod 重写日志 && 服务 apache2 重新启动

© www.soinside.com 2019 - 2024. All rights reserved.