IIS URL重写不起作用,甚至没有捕获到输入URL?

问题描述 投票:0回答:1

失败的请求跟踪可以很好地记录失败的重写。我可以查看日志文件,至少可以理解为什么重写不起作用。

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可以正常工作,只是在本地网络上发布的另一个简单网站)。我什至不知道现在是否有可能,或者我在这里做错了。

asp.net-mvc iis proxy url-rewriting reverse-proxy
1个回答
0
投票

URL重写入站规则在控制器操作之前得到执行。如果您可以在失败的请求跟踪日志中发布完整的错误消息,我们将不胜感激。

如果请求http://10.0.0.5/index,但从IIS返回404。听起来您的ARR代理根本没有启用。首先,请尝试禁用反向代理出站规则。然后转到IIS管理器->服务器节点->应用程序请求路由缓存->服务器代理设置->启用代理。

© www.soinside.com 2019 - 2024. All rights reserved.