想知道是否有人知道或有过调试一组 isapi 重写规则的经验?
我有相当多的规则集,因此手动检查它们并不容易。所以我想知道是否有任何测试工具可用于放入您的规则并传入 URL,并查看匹配的规则是什么以及结果 URL 是什么?
或者做不到这一点,某种高级日志记录可能会指导我找出问题所在。
任何帮助将不胜感激,因为我的大脑即将融化!
干杯
最佳答案
我已经使用 isapi_rewrite 的调试日志记录完成了这项工作。它运作良好,但无助于您的大脑融化。一个真正的调试器会很好。
我假设您使用的是 isapi_rewrite v3。
日志记录在主 httpd.conf 文件中控制。使用他们的“管理器”应用程序编辑此文件,默认安装在开始 -> 程序 -> Helicon -> ISAPI_Rewrite 3 -> ISAPI_Rewrite Manager
或者,您可以在 C:\Program Files\Helicon\ISAPI_Rewrite 3\httpd.conf(或等效的 Windows 安装目录)中手动编辑它。我相信它是隐藏的,所以你们很多人需要显示隐藏文件。
这是我放入此文件的注释,所以我记得设置。根据需要注释行进出。
# Logging
# RewriteLog specifies log file.
# RewriteLogLevel specifies verbosity. 0 = none, 9 = all.
#RewriteLogLevel 9
# LogLevel is for general logging for config file loading problems, not rewriting. Default is warn.
#LogLevel debug
RewriteLogLevel
是打开和关闭日志记录的设置。我一般用0或者9,其他的设置我也试过好奇,具体的不知道。通常,如果我正在追逐一个问题,我想要一切。
RewriteLog 将指定一个替代日志文件,但我只是未指定它,它会写入 C:\Program Files\Helicon\ISAPI_Rewrite 3\(或等效的 Windows 安装目录)中的 Rewrite.log
)
(我很少(从来没有?)使用过 LogLevel;我只是把它放在那里,注释掉,以提醒自己我没有使用它。)
通过删除前导的 #
取消注释行,然后保存。 (在他们的编辑器中,单击左上角的应用,或 ctrl-s;然后在主对话框中再次应用。您可以让主对话框保持打开状态,以便再次快速将其注释掉。)
Rewrite.log 文件将开始快速填满。这实际上仅在开发系统上实用,您的请求是唯一的。如果您正在制作中,请将其打开,点击页面,然后快速将其关闭。日志文件具有 IP 地址,可以帮助找到您的规则。
您将看到初始请求通过所有规则,直到匹配为止。然后你会看到 [INTERNAL REDIRECT]
这意味着它已经完成了重写规则(这是一个用词不当的地方,让我愚弄了一段时间 - 它只是意味着它正在从我们的角度重写,而不是“明确地强制重定向”用于实际的 Web 重定向)。
这是我对这个问题的回答中的日志文件示例:
How to redirect a page in ISAPI_Rewrite
这会将/cnvrt 重定向到/convert,然后将/convert 重写为/convert.aspx
您可以看到第一个 block 匹配重定向并执行它。然后第二个 block 是/convert url 匹配并重写为 convert.aspx。如果没有匹配项,它就会通过所有规则。您可以在第三 block 中看到这一点,我的浏览器在那里寻找 favicon.ico,但没有找到。
这些日志还可以让您大开眼界,了解每个请求经过了多少 - 每个图像、样式表等都通过了所有规则。我尝试使用“快捷方式”规则来捕获/img、/images、*.css、*.js,然后不做任何更改就退出。您可以在下面看到这些尝试进行匹配。
最后一点:完成后,关闭日志记录,确保只是打开,清空并保存 Rewrite.log,不要删除Rewrite.log Helicon 论坛上有很多关于重新创建文件的权限问题的帖子。显然 isapi_rewrite 可以安装和编辑它,但重新创建它可能会遇到麻烦。
(Deleted IP addresses, date and time, domain and some session id tracking)
(1) Htaccess process request C:\Program Files\Helicon\ISAPI_Rewrite3\httpd.conf
(1) Htaccess process request d:\websitepath\.htaccess
(3) applying pattern '^(?:/img/|/images/)' to uri '/cnvrt'
(3) applying pattern '(?:\.css|\.js)$' to uri '/cnvrt'
(3) applying pattern '(.*)' to uri '/cnvrt'
(4) RewriteCond: input='www.yourdomain.com' pattern='^(?!www\.|x\.|loc)(.*)$' => not-matched
(3) applying pattern '^/cnvrt$' to uri '/cnvrt'
(1) escaping /convert
(2) explicitly forcing redirect with http://www.yourdomain.com/convert
(2) internal redirect with /cnvrt [INTERNAL REDIRECT]
(2) init rewrite engine with requested uri /convert
(1) Htaccess process request C:\Program Files\Helicon\ISAPI_Rewrite3\httpd.conf
(1) Htaccess process request d:\websitepath\.htaccess
(3) applying pattern '^(?:/img/|/images/)' to uri '/convert'
(3) applying pattern '(?:\.css|\.js)$' to uri '/convert'
(3) applying pattern '(.*)' to uri '/convert'
(4) RewriteCond: input='www.yourdomain.com' pattern='^(?!www\.|x\.|loc)(.*)$' => not-matched
(3) applying pattern '^/cnvrt$' to uri '/convert'
(3) applying pattern '^/convert$' to uri '/convert'
(1) Rewrite URL to >> /projects/rw/convert.aspx
(2) rewrite '/convert' -> '/projects/rw/convert.aspx'
(2) internal redirect with /projects/rw/convert.aspx [INTERNAL REDIRECT]
(2) init rewrite engine with requested uri /favicon.ico
(1) Htaccess process request C:\Program Files\Helicon\ISAPI_Rewrite3\httpd.conf
(1) Htaccess process request d:\websitepath\.htaccess
(3) applying pattern '^(?:/img/|/images/)' to uri '/favicon.ico'
(3) applying pattern '(?:\.css|\.js)$' to uri '/favicon.ico'
(3) applying pattern '(.*)' to uri '/favicon.ico'
(4) RewriteCond: input='www.yourdomain.com' pattern='^(?!www\.|x\.|loc)(.*)$' => not-matched
(3) applying pattern '^/cnvrt$' to uri '/favicon.ico'
(3) applying pattern '^/convert$' to uri '/favicon.ico'
关于debugging - isapi 重写调试或测试工具,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5301987/