2012-12-29 63 views

回答

35

IIS試圖在這裏變得聰明。他攔截了網址中的點,並認爲這是一個靜態文件,並嘗試使用默認的StaticFile處理程序進行處理。它將dopesn't事件傳遞給託管的ASP.NET應用程序。

第一種可能性是添加以下的你的web.config

<system.webserver> 
    <modules runAllManagedModulesForAllRequests="true" /> 

,但實際上這不是我會建議你這樣做,因爲這可能對應用程序的性能產生負面影響,因爲現在所有的對靜態文件(如.js,.css,images,...)的請求將通過託管管道進行。

建議的方法是以下處理程序添加到您的web.config(的<system.webServer><handlers>標籤):

<system.webServer> 
    <handlers> 
     <add name="Robots-ISAPI-Integrated-4.0" path="/robots.txt" verb="GET" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /> 
     ... 
    </handlers> 
</system.webServer> 

注意我們是如何規定的,這種處理器將只適用於一個特定的URL和HTTP動詞。

現在,當您獲取/robots.txt時,IIS將不再使用StaticFile處理程序處理它,而是將其傳遞到託管管道ASP.NET。然後它將被路由引擎攔截並路由到相應的控制器動作。

+2

有沒有辦法讓IIS的行爲來處理靜態文件,但如果沒有找到該文件,而不是服務的IIS 404頁,將它傳遞到管理管道進行審查? –

+0

啊哈,[找到它](http://stackoverflow.com/questions/4483849/default-redirect-for-error-404)! –

0

除非你需要一個動態生成的robots.txt文件,這是非常必要的很少,只是做到以下幾點:

  • 忽略路線的robots.txt

    routes.IgnoreRoute(爲 「robots.txt」);

  • robots.txt文件添加到您的根目錄

+1

實際上,默認情況下IIS沒有任何配置。 (除了.aspx文件外,任何帶有擴展名的url都會被當作文件對待) –

+0

我們實際上有一個用例:拒絕開發站點上的機器人(以防萬一我們搞砸防火牆設置),但允許它生產(帶有「web.config」更改)。 –

+0

我也有一個用例。 3個Umbraco網站運行相同的應用程序。我需要爲每個域提供不同的robots.txt文件。 –