我想知道如何创建和调试这种脚本,如果你不习惯写它们(像我一样),它会变得有点头疼。
你使用工具来创建它们吗?
有什么提示来调试发生了什么,而不是仅仅创建一个本地结构,看看在浏览器中发生了什么?
读者注意:旧的答案不再适用。
从2.4版本开始,Apache不再允许RewriteLogLevel
和RewriteLog
指令。现在它们都与单个LogLevel
指令捆绑在一起(参见日志文件文档),它支持带有前缀和trace[1-8]
常量的模块特定日志级别。要专门为重写模块设置最高级别的日志记录,现在可以使用以下命令:
LogLevel warn rewrite:trace8
-
您可以使用任何正则表达式测试工具来帮助您测试针对url的模式(我使用的是"The regex Coach"—Windows应用程序)。这只会对你的模式有帮助——你应该已经知道了重写工作的一般逻辑/流程。
-
DEBUG你必须能够编辑Apache配置文件——使用
RewriteLogLevel 9
和RewriteLog /path/to/rewrite.log
来查看URL重写期间发生的确切细节(因为这是一个服务器配置,你必须重新启动Apache以应用新的服务器配置)。如果你想调试有问题的规则,你需要级别9。第3级或任何其他相当低的值只会显示正在发生的事情的概述,而不会进入细节。
不要在繁忙/生产服务器上使用9级,因为它可能会在几秒钟内生成大量日志。
-
如果你需要做301(永久)重定向-在测试期间改为302(直到你对规则和结果感到满意-然后更改为301),因为现代浏览器会缓存301重定向。因此,当您完全更改了规则(甚至删除了规则)但浏览器仍然执行重定向时,您可能会遇到令人沮丧的情况。在这种情况下,唯一的解决方法是:清空浏览器缓存并重新加载页面。
您可以在虚拟主机配置中设置RewriteLog指令它将把必要的信息写入您指定的文件。
RewriteLog "/usr/local/var/apache/logs/rewrite.log"
进一步,使用RewriteLogLevel指令来控制日志记录的数量
RewriteLogLevel 3
阅读