ASP.NET MVC 5如何正確加入robots.txt?
圖片: http://blogtimenow.com
各位都知道ASP.NET MVC Framework從一開始就是走「路由(Routing)」機制,它並不是使用如ASP.NET (WebForms)的實體路徑+實體檔案的對應方式,所以要如何做才能加入robots.txt?
習慣性之Google之路
對於不知道的事物,我相信大家的第一選擇就是求Google大神幫忙。
關鍵字:mvc robots.txt
哇,有一堆的答案,都已經ASP.NET MVC 5了,這問題應該早就已經是FAQ級的問題了吧?
處理方式有二:
- "robots.txt" Routing + ViewResult
- "robots.txt" Routing + FileResult
"robots.txt" Routing 意指設置一條 url: "robots.txt"
,然後利用 default:
指到預設的 {controller}/{action}
,由此來回應 robots.txt 的內容。
ViewResult 是利用 View Page 來回應 robots.txt 內容。File 是利用資料流來回應 robots.txt 的內容。以效率而言,File沒有 Disk I/O 成本,是比較好的的方式,所以我最後選用File來回應 robots.txt 的內容。
以上透過一條假路由方式來模擬根目錄下的 robots.txt。
網路上的教學都還會特別提到一條 web.config 的設置:<modules runAllManagedModulesForAllRequests="true"></modules>
,由 iis.net 文件中可以看到以下說明:
Optional Boolean value.
True if all managed modules can process all requests, even if the request was not for managed content; otherwise, false.
Note: In ASP.NET websites, the value of runAllManagedModulesForAllRequests previously had to be set to true to support routing. However, once IIS 7 has been updated with a Service Pack, the value of runAllManagedModulesForAllRequests can be set to false or omitted when working with ASP.NET routing. For more information, see ASP.NET Routing on the MSDN website.
The default value is false.
也就是說從 IIS 7 開始(更正確是指某個 Service Pack,我沒細查,文件也沒寫),為了支援 ASP.NET Routing ,runAllManagedModulesForAllRequests
預設會修改為 false
,如果 web.cofing 沒有加上去,那麼你會得到一個 HTTP 404 錯誤。但這樣好嗎?