【发布时间】:2020-09-16 14:37:02
【问题描述】:
失败的请求跟踪可以很好地记录失败的重写。我可以查看日志文件,至少可以理解为什么重写不起作用。
正则表达式模式已通过匹配测试 OK,但我在浏览器中输入的输入 URL 甚至没有被捕获。所有映射到控制器操作的 URL 都被捕获(我的网站是一个 ASP.NET MVC 应用程序)但是我需要重写的 URL 没有映射到任何,页面显示 404。但我希望它被重写为一些工作 URL (为了测试它,而不是显示 404,它应该被重写到目标 url 并显示从那里返回的内容)。
我的 URL 重写规则使用 Reverse Proxy 模板。
我希望我在这里的理解是正确的。我该如何诊断?我的目的只是通过捕获通过我的网站的所有请求来将 IIS 转换为反向代理,在请求重写的 URL 并将内容返回给原始客户端之前检查是否有任何匹配定义的正则表达式模式。
更新
对于那些可能不了解 ASP.NET MVC 的人:
假设我的网站有一个名为HomeController 的控制器,其动作为Index,映射到它的URL 是/Home/Index。
我的意思是未映射到任何操作的网址可能是/Home/TestProxy
这里HomeController 没有公开任何操作TestProxy,也没有任何路由规则映射/Home/TestProxy 到任何操作。所以在这种情况下,ASP.NET MVC 应用程序将显示一个404 页面。
如上所述,对于映射到有效控制器操作的 URL,它们似乎被捕获并视为输入 URL(在根据重写规则进行检查之前)。但是对于未映射到任何控制器操作的 URL(显示 404),我看不到任何记录为输入 URL(因此,它们当然不会根据重写规则进行检查,也不会起作用)。
更新 2
实际上,我测试的 URL 甚至没有映射到控制器,所以看起来它没有被我设置的 Failed Requests Tracing 规则记录。现在我尝试使用映射到控制器但没有映射到任何操作的 URL(它仍然显示 404)但成功地被 Failed Request Tracing 规则记录。我可以在日志文件中看到这一点:
<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 没有映射到任何”时,请显示(屏幕截图、视频或任何合适的) .如果出现常见错误,您还应该显示规则。
-
@LexLi 我的意思是 URL 没有映射到任何 控制器操作,这不是很清楚吗?在这种情况下,我的网站显示 404。我认为在这种情况下不需要具体说明
-
@LexLi 请参阅我上面的更新部分,如果您对这个问题投了反对票,请考虑删除您的投票,谢谢!
标签: asp.net-mvc iis proxy url-rewriting reverse-proxy