2

想知道是否有人知道或有过调试一组 isapi 重写规则的经验?

我有很多规则,因此手动通过它们并不容易。所以我想知道是否有任何测试工具可用于放入您的规则并传入 URL,并查看匹配的规则/匹配以及结果 URL 是什么?

或者如果做不到这一点,某种高级日志记录可能会指导我了解我的问题可能出在哪里。

任何帮助将不胜感激,因为我的大脑即将融化!

干杯

4

2 回答 2

7

我已经用 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 将指定一个替代日志文件,但我只是不指定它,它写入Rewrite.logC:\Program Files\Helicon\ISAPI_Rewrite 3\ (或等效的 Windows 安装目录)

(我很少(从来没有?)使用过 LogLevel;我只是把它放在那里,注释掉,以提醒自己我不使用它。)

通过删除前导取消注释该行#并保存它。(在他们的编辑器中,单击左上角的应用,或 ctrl-s;然后在主对话框中再次应用。您可以保持主对话框打开以再次快速将其注释掉。)

Rewrite.log 文件将开始快速填满。这实际上只在开发系统上实用,您的请求是唯一的。如果您正在生产,请打开它,点击页面,然后快速关闭它。日志文件具有 IP 地址,可帮助您定位规则。

您将看到初始请求通过所有规则,直到匹配为止。然后你会看到[INTERNAL REDIRECT]这意味着它已经完成了规则的重写(这有点用词不当,愚弄了我一段时间 - 它只是意味着它从我们的角度来看是重写,而不是实际 Web 重定向的“显式强制重定向”)。

这是我对这个问题的回答中的一个日志文件示例:
How to redirect a page in ISAPI_Rewrite

这会将 /cnvrt 重定向到 /convert,然后将 /convert 重写为 /convert.aspx

您可以看到与重定向匹配的第一个块并执行此操作。然后第二个块是 /convert url 匹配并被重写为 convert.aspx。如果没有匹配,它就会违反所有规则。您可以在第三个区块中看到这一点,我的浏览器在那里寻找 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'
于 2011-07-23T02:56:41.737 回答
1

如果您可以在服务器或开发机器上安装 Helicon Ape 而不是 ISAPI_Rewrite,那么您可以使用 Ape 产品附带的更方便的调试器。文档mod_developer和文章Trace HTTP traffic and IIS configuration Helicon Ape 在 RewriteRule 语法方面与 ISAPI_Rewrite 3 兼容,因此您可以使用它来开发规则。

于 2011-07-26T14:02:28.837 回答