Перезапись URL-адреса в IIS: как надежно сохранить относительные пути при обслуживании нескольких файлов? - PullRequest
0 голосов
/ 26 мая 2010

My WebApp является частью CMS , и когда я предоставляю пользователю HTML-страницу, она обычно содержит относительные пути в a.href и img.src атрибуты.

В настоящее время я обращаюсь к ним по таким URL-адресам, как: ~ / get-data.aspx / экземпляр / user / page.html - где instance указывает конкретный экземпляр для отчета, а "user / page.html" - это путь, созданный внешним приложением, которое генерирует контент.

Это довольно надежно работает с кодом в методе BeginRequest приложения, который переводит текст после «.aspx» в строку запроса, а затем использует Context.RewritePath () .

Пока все хорошо, но я только что споткнулся о чем-то, что застало меня врасплох: кажется, что если какая-либо строка запроса (" instance / user / page.html") случайно содержит знак плюс (" + "), метод BeginRequest никогда не вызывается, и 404 немедленно возвращается пользователю.

Итак, мой вопрос состоит из двух частей:

  1. Правильно ли я верю в то, что "+" вызовет 404, и если да, то есть ли другие вещи, которые могут вызвать аналогичные проблемы? Есть ли способ обойти эту проблему (возможно, метод, отличный от BeginRequest )?

  2. Есть ли лучший способ сохранить относительные URL-пути для сгенерированного контента, чем тот, который я использую? Я бы предпочел, чтобы администраторы сайтов не устанавливали сторонние утилиты для перезаписи, если я могу помочь.

1 Ответ

0 голосов
/ 26 мая 2010

Да, это настройка безопасности IIS. Вы можете обойти это, поместив это в свой веб-конфиг.

<system.webServer>
<security>
    <requestFiltering allowDoubleEscaping="True"/>
</security>
</system.webServer>

Однако вы должны быть осторожны с тем, что вы делаете. Если включено двойное экранирование, это позволит самому экранированному URL содержать escape-символы, которые можно использовать для перезаписи вашего URL-адреса для передачи экранированных символов в строку запроса для создания строки запроса, отличной от вашей.

...