2011-11-24 64 views

回答

7

你可以安裝URL重寫模塊http://www.iis.net/downloads/microsoft/url-rewrite
記住這個模塊工作在IIS上,而不是卡西尼/ IIS快遞。

和你的web.config添加以下規則第<system.webServer>

<rewrite> 
    <rules> 
     <rule name="robots" stopProcessing="true"> 
      <match url="robots.txt" /> 
      <action type="Rewrite" url="/Content/robots.txt" /> 
     </rule> 
    </rules> 
</rewrite> 

我檢查新的MVC 3 .NET項目,並與同一個文件的URL響應: mywebsite.com/robots .TXT
mywebsite.com/Content/robots.txt

+0

不錯,但要謹慎使用Rewrite 1.0和Azure Web角色:) –

+0

這仍然是URL Rewrite 2.0的問題嗎? – jbolanos

0

解決方法1:如果您指定的URL。瀏覽器將向IIS或網絡服務器請求此操作。 MVC不參與閱讀文件等。它將這些請求提供給IIS進行處理。您需要爲文件夾分配權限。

解決方案2:如果有,請閱讀PresentationModel中的文件。在Chunks中讀取此文件並將其作爲文件類型返回給瀏覽器。

我希望它會給你一些方向。

5

您可以設置磁盤文件的路由請求。默認情況下,路由系統會在評估應用程序的路由之前檢查url是否與磁盤文件匹配。如果存在匹配,則磁盤文件被提供並且不使用路由。但是,可以通過將RouteCollectionRouteExisitingFiles屬性設置爲true來檢查磁盤文件之前查看路由,以便查看路由。將此語句放在RegisterRoutes方法的頂部 - 這似乎是mvc應用程序的慣例。然後你爲磁盤文件定義一個路由。請注意,這樣做時可能會產生一些不可預見的效果,因爲分歧可能會捕獲其他類型的URL。

11

添加這樣的路線應該有所斬獲。這樣可以提供任何靜態.txt文件,如robots.txt。

routes.IgnoreRoute("{resource}.txt"); 
+0

這不起作用,我想你需要使用下面列出的其他方法。我會建議Url重寫模塊。 –

+3

這個技巧對我很好。 (我把它放在RegisterRoutes()方法的RouteConfig.cs文件的頂部。) – Greg

-1
routes.MapRoute("Robots","robots.txt"); 
0

我能夠通過重寫路徑中的事件處理程序在Global.asax中做到這一點的BeginRequest

BeginRequest += delegate 
{ 
    switch (Request.RawUrl.ToLowerInvariant()) 
    { 
     case "/favicon.ico": 
      Context.RewritePath("~/Content/favicon.ico"); 
      return; 
     case "/robots.txt": 
      Context.RewritePath("~/Content/robots.txt"); 
      return; 
    } 
};