[英]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.