我一直在建議from this article在asp.net mvc3中設置robots.txt文件,以便使用控制器來處理服務器響應,並且IIS 8.0 express正在返回一個文件沒有發現錯誤,而不是一個asp.net錯誤。帶有擴展名的url沒有通過路由處理
如何讓IIS在這些情況下不查找文件?有什麼我需要在web.config?
我一直在建議from this article在asp.net mvc3中設置robots.txt文件,以便使用控制器來處理服務器響應,並且IIS 8.0 express正在返回一個文件沒有發現錯誤,而不是一個asp.net錯誤。帶有擴展名的url沒有通過路由處理
如何讓IIS在這些情況下不查找文件?有什麼我需要在web.config?
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。然後它將被路由引擎攔截並路由到相應的控制器動作。
除非你需要一個動態生成的robots.txt文件,這是非常必要的很少,只是做到以下幾點:
忽略路線的robots.txt
routes.IgnoreRoute(爲 「robots.txt」);
robots.txt文件添加到您的根目錄
實際上,默認情況下IIS沒有任何配置。 (除了.aspx文件外,任何帶有擴展名的url都會被當作文件對待) –
我們實際上有一個用例:拒絕開發站點上的機器人(以防萬一我們搞砸防火牆設置),但允許它生產(帶有「web.config」更改)。 –
我也有一個用例。 3個Umbraco網站運行相同的應用程序。我需要爲每個域提供不同的robots.txt文件。 –
有沒有辦法讓IIS的行爲來處理靜態文件,但如果沒有找到該文件,而不是服務的IIS 404頁,將它傳遞到管理管道進行審查? –
啊哈,[找到它](http://stackoverflow.com/questions/4483849/default-redirect-for-error-404)! –