Разрешить действительность путей запроса с двойным кодированием URL

У меня есть стандартное приложение ASP.Net WebForms, работающее на IIS 7.0 с интегрированным управляемым конвейером. Многие изображения на нашем сайте имеют пробелы в именах файлов (например, './ baseball drawing.gif' ). Когда мы размещаем эти изображения на наших html-страницах, мы URL-кодируем пути так, чтобы наши html-теги img выглядели так: < img src = '. / Baseball% 20drawing.gif' />

Теперь проблема возникает в когда определенные поисковые системы и веб-краулеры пытаются проиндексировать наш сайт. Когда они очищают наши страницы, они будут html-кодировать наши уже закодированные в html пути, получая ссылки на изображения, подобные этой './ baseball% 2520drawing.gif' , где % 25 - кодировка URL для ' % '. Это вызывает две проблемы:

  1. Когда пользователи получают результаты из этих поисковых систем, они получают неработающие ссылки.
  2. Когда пользователи пытаются перейти по этим неработающим ссылкам, в нашей системе возникают ошибки.

Как видите, это проигрышная ситуация. Пользователи получают неработающие ссылки, и мы получаем шум в наших журналах ошибок.

Я безуспешно пытался придумать, как исправить эту проблему. Вот что я пробовал:

  1. Установите в web.config, чтобы предотвратить «ошибку 404.11 URL с двойным экранированием». Это устранило первую ошибку, но вызвало новую: «Обнаружен потенциально опасный Request.Path».
  2. Удален «%» из , чтобы предотвратить появление ошибки «потенциально опасный Request.Path». Это устранило вторую ошибку, но теперь у нас есть третья: «Ресурс не найден».
  3. Я сделал паузу в своем коде, чтобы посмотреть Request.Path . Похоже, что это правильно со значением «Ball Image.gif» вместо «Ball% 2520Image.gif». В этом случае я не уверен, почему это не работает.

Я чувствую, что у меня есть суперхак, когда мне приходится все отключать, не понимая, почему ничего не работает. Итак, я предполагаю, что у меня тройной вопрос

  1. Почему попытка решения 1 не решила проблему?
  2. Почему решение 2 не решило проблему?
  3. Почему мой Request.Path выглядит правильно на этапе 3, но он по-прежнему не работает?

Мы будем благодарны за любую помощь, которую может предоставить каждый.

8
задан Mark Rucker 3 August 2012 в 15:54
поделиться