如何调试 htaccess 重写脚本

Posted

技术标签:

【中文标题】如何调试 htaccess 重写脚本【英文标题】:How to debug htaccess rewrite script 【发布时间】:2011-12-05 23:51:15 【问题描述】:

我想知道如何创建和调试这种脚本,如果你不习惯编写它们(比如我),可能会有点头疼。

你使用工具来创建它们吗?

有什么提示可以调试正在发生的事情,而不是仅仅创建一个本地结构并查看浏览器中发生了什么?

【问题讨论】:

Tips for debugging .htaccess rewrite rules 的可能重复项 【参考方案1】:

    您可以使用任何正则表达式测试工具来帮助您针对 URL 测试您的模式(我使用的是“正则表达式教练”——Windows 应用程序)。这只会帮助你学习模式——你应该已经知道重写工作的一般逻辑/流程。

    调试,您必须能够编辑 Apache 配置文件 -- 使用 RewriteLogLevel 9RewriteLog /path/to/rewrite.log 来查看 URL 重写期间发生的确切细节(因为它是您的服务器配置必须重新启动 Apache 才能应用新的服务器配置)。

    如果您想调试有问题的规则,您需要级别 9。第 3 级或任何其他相当低的值只会向您展示正在发生的事情的概览,而不会详细介绍。

    不要在繁忙/生产服务器上使用级别 9,因为它可能会在几秒钟内生成大量日志。

    如果您需要执行 301(永久)重定向 - 在测试期间执行 302(直到您对规则和结果感到满意 - 然后更改为 301),因为现代浏览器会缓存 301 重定向。 . 因此,当您完全更改规则(甚至将其删除)但浏览器仍会执行重定向时,您可能会遇到令人沮丧的情况。在这种情况下唯一的解决方法是:--清除浏览器缓存并重新加载页面。

【讨论】:

尽管这是一个很老的答案,但使用 302 的提示非常有用! 我在任何相关问题上看到的第一个答案,它指定“新”方法 (RewriteLogLevel <level_number>) 必须放在 服务器配置 文件中。在 2.4 之前,日志级别(或至少可以)放置在 .htaccess 中。因此,即使其他人比较 syntax 的变化,他们也不会没有提及 location改变!甚至 docs 也 not 提到 where 放置该指令(我可以找到)。所以,当然,我把它放在.htaccess,这只是产生了一个错误!一周后,我找到了你的答案。谢谢。【参考方案2】:

读者注意:旧答案不再有效

从 2.4 版开始,Apache 不再允许使用 RewriteLogLevelRewriteLog 指令。现在它们都与单个 LogLevel 指令捆绑在一起(请参阅 Log Files 文档),该指令支持带有前缀和 trace[1-8] 常量的模块特定日志级别。要专门为重写模块设置***别的日志记录,您现在可以使用以下内容:

LogLevel warn rewrite:trace8

【讨论】:

我可以在哪里写 LogLevel 警告重写:trace8 htaccess【参考方案3】:

您可以在虚拟主机配置中设置 RewriteLog 指令 它会将必要的信息写入您指定的文件中。

RewriteLog "/usr/local/var/apache/logs/rewrite.log"

进一步,使用 RewriteLogLevel 指令来控制记录的数量

RewriteLogLevel 3

read through

【讨论】:

以上是关于如何调试 htaccess 重写脚本的主要内容,如果未能解决你的问题,请参考以下文章

.htaccess:使用 RewriteCond 但对 IMAGES/JS/CSS 文件的hrefs仍然被不必要地重写[重复]

在 XAMPP 中使用 .htaccess local 重写 URL

如何在apache中重写url

调试 .htaccess 的流行技术

如何使 Zend Framework 2 与 nginx 一起工作?

如何使用 .htaccess 密码保护 WordPress 博客