IIS URL 重写和 ARR 无法正确处理重写规则



我对URL重写和ARR如何协同工作有一些理解问题。我有一个站点和一个独立服务,该服务为站点生成并提供更新的站点地图。以下是我处理站点地图请求的规则。它是 web.config 中站点目录下的本地规则(站点在 IIS 10 下托管(。

<rule name="Sitemap Rule" stopProcessing="true">
<match url="^sitemap.*" />
<action type="Rewrite" url="http://sitemap.mysitedomain/provider?key={R:0}" logRewrittenUrl="true" />
</rule>

一切看起来都不错,但它不起作用。我得到的唯一回应是404。我应该注意 ARR 模块是活动的,它可以正确处理其他代理请求。

为了透明地了解此规则,假设某个网络机器人请求 http://mysitedomain/sitemap.xml,真正的请求将从站点map.mysitedomain托管在不同服务器和不同环境中的 http://sitemap.mysitedomain/provider?key=sitemap.xml 提供服务。

奇怪的是,如果我把空的站点地图.xml放在mysitedomain的根目录上,我对站点地图的所有请求.xml开始按预期工作,我开始从站点地图服务获取更新的站点地图.xml以及我放置在站点根目录的空站点地图。


从失败的请求中添加了一些跟踪信息

对于我在跟踪文件中的下一个失败请求

...
ModuleName    RewriteModule
HeaderName    X-Original-URL 
HeaderValue   /sitemap.xml 
Replace       true 
OldUrl       /sitemap.xml 
NewUrl       http://sitemap.mysitedomain/v1/sitemap/provider?key=sitemap.xml
...
ModuleName            ApplicationRequestRouting 
Notification          MAP_REQUEST_HANDLER 
fIsPostNotification   false 
...
OldUrl                http://sitemap.laf24.ru/v1/sitemap/provider?key=sitemap.xml 
NewUrl                /sitemap.xml 
...
ModuleName            ManagedPipelineHandler 
Notification          EXECUTE_REQUEST_HANDLER 
HttpStatus            404 
HttpReason            Not Found 
HttpSubStatus         0 
ErrorCode             The operation completed successfully. (0x0) 

我应该再次指出,如果我将一个空的站点地图.xml放在mysitedomain的根目录上,那么所有站点地图都会按预期开始工作。我从sitemap.mysitedomain获得了实际数据。

我已经找到了为什么会发生这种情况,这不是 Url 重写或 ARR 模块的问题。主要原因是 ASP.Net 处理此类请求并返回 404,因为没有定义用于处理此类路径的路由。

为了解决此问题,我们添加了站点地图网址的忽略定义

routes.IgnoreRoute("sitemap.xml");
routes.IgnoreRoute("sitemap/{*pathInfo}");

最新更新