instalar - IIS7: Reescritura de URL con período
url amigables iis (4)
Como Matthew ya señaló, esto se puede resolver en .NET 4.0, pero no en .NET 2.0. El problema radica en el sistema subyacente: Microsoft prohíbe que los nombres finalicen con un punto (o un espacio, para el caso), porque Windows Explorer no puede manejarlos (sin embargo, el sistema NTFS subyacente puede manejarlos).
Cuál es la causa
Internamente, y esto es cierto para .NET 2.0 y .NET 4.0, una solicitud web se pasa, en algún momento, al método IsSuspiciousPhysicalPath
. Entre otras cosas, este método llama a una API estándar para crear una ruta "oficial" en función de la ruta dada. No crea este camino. Luego compara esta ruta correcta con la ruta dada. Si son diferentes (es decir, si la ruta dada no existe en la ruta corregida) se considera sospechosa.
Puede intentarlo usted mismo: use File.CreateFile para crear el archivo "test.txt ....". Esto tendrá éxito, pero el archivo resultante es "test.txt". En el escenario anterior, el archivo "text.txt ...." dado no se ajusta al archivo creado, por lo tanto, es sospechoso y nunca llega al manejador de solicitudes web.
¡Incluso un controlador 404 en la configuración base de IIS no funcionará aquí!
Una solución descabellada
Una solución que he utilizado durante años en muchas configuraciones (por motivos no relacionados con este problema): instale Apache delante de IIS y configúrelo para el proxy. Es relativamente fácil de configurar (se pierden ejemplos en Internet) y esto puede actuar como un búfer para manejar este tipo de "solicitudes ilegales", reescribiéndolas a algo que IIS puede manejar.
Pero probablemente sea más fácil simplemente pasar de .NET 2.0 a .NET 4.0
Estoy usando URL amigables para SEO, y puedo procesar la mayoría de ellas con ASP.NET, asignando aspnet_isapi.dll a todas las URL. (Configuré una asignación de manejador en IIS que usa el dll para todas las rutas. (Ruta = *))
Sin embargo, eso no parece funcionar cuando el último carácter de una "subcarpeta" es un punto. Por ejemplo, tengo una URL de /brakes/ABS/
, y eso no activará la asignación. Así que termino con 404 para tales URL. ¿Alguien sabe cómo debo configurar el mapeo para activar esto? (He intentado *. Y eso tampoco funciona).
En mi caso, no pude hacerlo usando la Reescritura de URL mientras que había otro motivo, el Escaneo de URL.
Abrí windows / system32 / inetsrv / urlscan / urlscan.ini en un editor de texto y habilité AllowDotInPath cambiando su valor a 1
Estoy usando el enrutamiento de atributos de la API web
La respuesta seleccionada no funcionó para mí, es solo una solución parcial.
para asegurarse de que la API web obtiene la primera grieta, no solo tendrá que tener
<configuration>
<system.web>
<httpRuntime relaxedUrlToFileSystemMapping="true"/>
</system.web>
</configuration>
también necesitas tener
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"></modules>
</system.webServer>
Encontré la respuesta aquí en este blog:
PERMITIR UN PUNTO EN LA APLICACIÓN ASP.NET MVC (ESPECÍFICAMENTE IIS 7+)
Intente cambiar esta configuración en su web.config:
<httpRuntime relaxedUrlToFileSystemMapping="true" />
http://haacked.com/archive/2010/04/29/allowing-reserved-filenames-in-URLs.aspx