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

时间:2018-08-27 15:24:31

标签: iis url-rewriting 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模块处于活动状态,并且可以正确处理其他代理请求。

为透明起见,假设某个Web机器人请求http://mysitedomain/sitemap.xml和实际请求将由http://sitemap.mysitedomain/provider?key=sitemap.xml提供,其中sitemap.mysitedomain托管在不同的服务器和不同的环境中。

这里的奇怪之处在于,如果我将空的sitemap.xml放在mysitedomain的根目录中,则所有对sitemap.xml的请求都按预期开始工作,并且我开始从sitemap服务中获取更新的sitemap.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) 

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

1 个答案:

答案 0 :(得分:0)

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

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

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