簡體   English   中英

IIS URL重寫和ARR無法正確處理重寫規則

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM