2011-11-24 66 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; 
    } 
};