2011-11-24 16 views

Respuesta

7

Se podría instalar módulo de reescritura de URL: http://www.iis.net/downloads/microsoft/url-rewrite
Recuerde que este módulo trabaja en IIS y no en Cassini/IIS Express.

Y añadir siguiente regla a su web.config a la sección <system.webServer>

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

he comprobado en el nuevo MVC 3 .NET proyecto y las dos respuestas URL con el mismo archivo: mywebsite.com/robots .txt
mywebsite.com/Content/robots.txt

+0

Agradable, pero tenga cuidado con Rewrite 1.0 combinado con los roles de Azure Web :) –

+0

¿Sigue siendo un problema con URL Rewrite 2.0? – jbolanos

0

Solución 1: Si especifica la URL. El navegador lo solicitará a IIS o al servidor web. MVC no participa en el archivo de lectura, etc. Da estas solicitudes a IIS para que lo maneje. Debe asignar permiso a la carpeta.

Solución 2: Lea el archivo en el PresentationModel si lo tiene. lea este archivo en trozos y regrese como tipo de archivo al navegador.

Espero que te dé una dirección.

5

Puede configurar la solicitud de enrutamiento para los archivos del disco. De forma predeterminada, el sistema de enrutamiento comprueba si la URL coincide con el archivo del disco antes de evaluar las rutas de la aplicación. Si hay una coincidencia, se sirve el archivo de disco y no se utilizan las rutas. Sin embargo, esto puede ser respetado para que las rutas sean examinadas antes de que se comprueben los archivos de disco configurando la propiedad RouteExisitingFiles de RouteCollection en true. Coloque esta declaración cerca de la parte superior del método RegisterRoutes: esto parece ser una convención para las aplicaciones de mvc. Luego define una ruta que para los archivos de disco. Tenga en cuenta al hacer esto que puede haber algunos efectos imprevistos porque el riute podría incluir otros tipos de URL.

11

Agregar una ruta como esta debería hacer el truco. De esta forma, cualquier archivo .txt estático como robots.txt puede ser servido.

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

Esto no funciona, creo que debe usar los otros métodos enumerados a continuación. Sugeriría Url Rewrite Module. –

+3

Esta técnica funcionó muy bien para mí. (Lo puse en la parte superior del archivo RouteConfig.cs en el método RegisterRoutes()) – Greg

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

que era capaz de hacer esto por caminos de reescritura en un controlador de eventos para BeginRequest en global.asax.

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