Tengo una aplicación ASP.Net WebForms estándar que se ejecuta en IIS 7.0 con una canalización integrada administrada. Muchas de las imágenes en nuestro sitio tienen espacios en los nombres de sus archivos (por ejemplo, './baseball drawing.gif'
). Cuando ponemos estas imágenes en nuestras páginas html que url codificar los caminos para que nuestras etiquetas HTML img ven así < img src='./baseball%20drawing.gif' />
Permitir doble dirección URL Ruta de solicitud codificada para ser válida
Ahora, el problema viene cuando ciertos motores de búsqueda y webcrawlers tratan de índice de nuestro sitio. Cuando raspen nuestras páginas, codificarán html nuestras rutas ya codificadas en html obteniendo enlaces de imagen como este './baseball%2520drawing.gif'
donde %25
es la codificación de URL para '%'. Esto ocasiona dos problemas:
- Cuando los usuarios obtienen resultados de estos motores de búsqueda, reciben enlaces rotos.
- Cuando los usuarios intentan navegar a estos enlaces rotos arrojan errores en nuestro sistema.
Como puede ver, esta es una situación de perder. Los usuarios obtienen enlaces rotos y recibimos ruido en nuestros registros de errores.
He estado tratando de encontrar la forma de corregir este problema sin suerte. Esto es lo que he intentado:
- Establecer
<requestFiltering allowDoubleEscaping='true'>
en web.config para evitar el "404.11 URL Double Escaped error". Esto corrigió el primer error pero causó uno nuevo, "se encontró un Request.Path potencialmente peligroso". - Se ha eliminado el '%' del
<httpRuntime requestPathInvalidChars>
para evitar el error "Request.Path potencialmente peligroso". Esto corrigió el segundo error, pero ahora tenemos un tercero, "No se puede encontrar el recurso". - Hice una pausa en mi código para ver
Request.Path
. Parece que está bien con un valor de 'Ball Image.gif' en lugar de 'Ball% 2520Image.gif'. Siendo este el caso, no estoy seguro de por qué no está funcionando.
Siento que tengo un súper truco en el que tengo que deshabilitar todo sin entender realmente por qué nada está funcionando. Así que supongo que mi pregunta es tres veces
- ¿Por qué el intento de solución 1 no solucionó el problema?
- ¿Por qué la solución 2 no solucionó el problema?
- ¿Por qué mi Request.Path se ve bien en el paso 3 pero todavía no funciona?
Cualquier ayuda que alguien pueda proporcionar sería muy apreciada.
Fuera de interés, ¿qué motor de búsqueda está roto? –
Buena pregunta. Clean Image Search es uno (http://www.cleanimagesearch.com). Para ver un ejemplo de lo que estoy hablando busque "imagen de béisbol". Una de las primeras imágenes que saldrá se romperá. Si hace clic en el enlace a esa imagen y reemplaza el% 25 en la url con simplemente% todo funcionará bien. También hay muchos sitios basura que simplemente son un conglomerado de imágenes de toda la web que también contienen enlaces rotos. Si desea un ejemplo de uno de estos, le puedo enviar un enlace por correo electrónico (no confío en sitios como estos, así que no quiero publicar el enlace aquí). –
También creo que este problema se produce cuando se hace una búsqueda de imágenes de Google en un iPad. En ese caso, sin embargo, Google es lo suficientemente inteligente como para manejar el error correctamente para que la imagen se muestre correctamente. Acabamos de recibir un error en nuestros archivos de registro. En este momento tenemos un filtro en el lugar para ignorar todos los errores causados por Google cuando el UserAgent es un IPad y el error es que Request.Path contiene un%. –