我们向 htaccess 编写了大量代码,但除了刷新页面之外,最好的调试方法是什么?
有什么方法可以将其写入文件吗?或者是否有一些回显/打印功能?
简单地说,我怎么知道我的 $1 $2 $3 是多少?
答案1
您可以尝试博客文章中提到的方法 调试 mod_rewrite 的几种方法(Wayback机器复制):
基本上,您要做的是将 mod_rewrite 正在使用的一些信息转储到标题中,然后使用 Firefox 中的 Firebug 或 LiveHTTP Headers 扩展来查看标题并读取您的调试信息。
在 .htaccess 中使用条件和规则:
RewriteCond %{QUERY_STRING} !vardump
RewriteRule (.*) http://www.example.com/$1?vardump&thereq=%{THE_REQUEST}&reqhost=%{HTTP_HOST} [R=302,L,QSA]
答案2
尝试这些:
RewriteLog "/myfolder/mylogfile.log"
RewriteLogLevel 3
这些只是带有一些附加功能的正则表达式,因此您可以使用正则表达式教练用于针对 URL 或任何其他 Regex 调试工具的初步测试。
干杯!:)
答案3
这是一个有趣的小技巧,可以从 .htaccess 文件中“回显”变量。
如果你有允许覆盖设置为 FileInfo 您可以设置并触发自定义错误响应在您的 .htaccess 文件中,输出所需的变量:
ErrorDocument 404 "Request: %{THE_REQUEST} Referrer: %{HTTP_REFERER} Host: %{HTTP_HOST}"
RewriteRule ^ - [L,R=404]
取决于你的创造力表达式你可以输出相当多有用的信息!
您不仅限于在“回显”内容上使用 404 状态。您甚至可以覆盖状态 200“ErrorDocument”——结合<If>
指令,此 hack 可以实现其他一些非常有趣的用途,直接从 .htaccess 文件返回内容。
答案4
调试重写规则的最佳方法可能根本不使用重写规则,而是将 URL 处理从 htaccess 文件推迟到 PHP 文件(我们称之为 router.php)。然后,您可以使用 PHP 进行任何您喜欢的操作,并进行适当的错误检测和常规调试。由于您不必使用重写模块,因此运行速度甚至更快。
要立即将控制权从 .htaccess 转移到 router.php,只需在 .htaccess 中输入以下行:
FallbackResource router.php
是的,就是这么简单。而且确实有效。试试看。请注意,您可能必须在 router.php 中处理一些错误情况,而不是依赖 ErrorDocument 指令。