如何调试 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 9
和 RewriteLog /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 不再允许使用 RewriteLogLevel
和 RewriteLog
指令。现在它们都与单个 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