debugging - isapi 重写调试或测试工具

标签 debugging testing isapi-rewrite

想知道是否有人知道或有过调试一组 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/

相关文章:

scala - 多项目中的 SBT 测试依赖关系 : Make the Test-Code Available to Dependent Projects

jquery - 如何在 Firefox 30 上调试 Greasemonkey 脚本?

json - NodeJS,如何在 GET 请求时调试 TLSSocket.socketOnData 的解析错误?

python - 调试 IndexError : Trivial sum generation problem

Python 测试断言(单元测试,剧作家)

unit-testing - 测试需要特定私有(private)方法调用的单元?

c# - 如何使用PDB文件调试应用程序?

windows - 从 ISAPI Rewrite 3 的 URL Rewrite 中排除某些 URL

redirect - Helicon ISAPI_Rewrite 301 将某些文件从一个文件夹重定向到另一个文件夹

regex - IIS 重写规则以检查查询字符串并在它不存在时添加它