失败的请求跟踪可以很好地记录失败的重写。我可以查看日志文件,至少可以理解为什么重写不起作用。
regex模式已通过匹配测试,确定,但是我在浏览器中输入的输入URL甚至没有被捕获。捕获了所有映射到控制器操作的URL(我的网站是ASP.NET MVC应用程序),但是我需要重写的URL没有映射到任何URL,页面显示404。但是我希望将其重写为一些有效的URL (进行测试,以便代替显示404,而应将其重写为目标url并显示从那里返回的内容)。
我的URL重写规则使用Reverse Proxy
模板。
我希望我在这里理解的是正确的。你能帮我诊断一下吗?我的目的仅仅是通过在我的网站上捕获所有请求,将IIS变成反向代理,在请求重写的URL并将内容返回给原始客户端之前,检查是否有任何与定义的正则表达式模式匹配的内容。
UPDATE:
对于那些可能不了解ASP.NET MVC的人:
假设我的网站有一个名为HomeController
且操作为Index
的控制器,并且映射到该URL的网址为/Home/Index
。
我的意思是未映射到任何操作的URL此处可能是/Home/TestProxy
这里HomeController
不公开任何动作TestProxy
,也没有任何路由规则映射/Home/TestProxy
到任何动作。因此,在这种情况下,ASP.NET MVC应用程序将显示404
页面。
如上所述,对于映射到有效控制器操作的URL,它们似乎已被捕获并视为输入URL(在根据重写规则进行检查之前)。但是对于未映射到任何控制器操作的URL(显示404),我看不到任何已记录为输入URL(因此,它们将不会根据重写规则进行检查,因此将无法使用)。
我希望以上更新足够清楚。
UPDATE 2:
实际上,我经过测试的URL甚至都没有映射到控制器,因此我设置的Failed Requests Tracing规则似乎未记录该URL。现在,我尝试使用映射到控制器但未映射到任何操作的URL(它仍显示404),但已通过“失败请求跟踪”规则成功记录。我可以在日志文件中看到此内容:
<EventData>
<Data Name="ContextId">{80000034-0000-F000-B63F-84710C7967BB}</Data>
<Data Name="Pattern">testproxy/(.*)</Data>
<Data Name="Input">home/testproxy/index</Data>
<Data Name="Negate">false</Data>
<Data Name="Matched">true</Data>
</EventData>
所以它报告了一个matched
模式,但该页面仍显示404,而我希望它从重写的url中返回内容(应该为http://10.0.0.5/index
-我确认如果直接请求该URL可以正常工作,只是在本地网络上发布的另一个简单网站)。我什至不知道现在是否有可能,或者我在这里做错了。
URL重写入站规则在控制器操作之前得到执行。如果您可以在失败的请求跟踪日志中发布完整的错误消息,我们将不胜感激。
如果请求http://10.0.0.5/index,但从IIS返回404。听起来您的ARR代理根本没有启用。首先,请尝试禁用反向代理出站规则。然后转到IIS管理器->服务器节点->应用程序请求路由缓存->服务器代理设置->启用代理。