[英]IIS URL Rewrite and ARR don't handle rewrite rule properly
我对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和实际请求将从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获得了实际数据。
我发现了为什么会发生这种情况,而Url Rewrite或ARR模块不是问题。 主要原因是ASP.Net处理此类请求并返回404,因为没有定义用于处理此类路径的路由。
为了解决这个问题,我们为Sitemaps网址添加了忽略定义
routes.IgnoreRoute("sitemap.xml");
routes.IgnoreRoute("sitemap/{*pathInfo}");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.