Для любого URL со знаком плюс (+) в базовом URL (не в строке запроса) IIS7 и IIS7.5 (Windows Server 2008 и 2008 R2) не отображаются для пересылки URL-адреса обработчику по умолчанию в приложении ASP.NET , Я начал замечать проблему с пользовательским обработчиком HTTP, *.html
но у меня та же проблема с *.aspx
. IIS6 (Server 2003) не имеет проблем с теми же URL-адресами.
Чтобы повторить проблему, на сайте ASP.NET я создал набор файлов ASPX, которые выполняли простой Response.Write с различными именами:
- test_something.aspx
- test_some + thing.aspx
- test_some thing.aspx
Третий файл был тестом, чтобы увидеть, обрабатывает ли IIS7 [.5] символы плюс как пробелы (как это было бы в строке запроса); это не похоже на случай. Со всеми этими файлами на месте, ударил http://somehost/test_some+thing.aspx
или http://somehost/test_some%2bthing.aspx
будет хорошо работать в IIS6, но 404 в IIS7 / IIS7.5, прежде чем добраться до любого обработчика ASP.NET. Есть ли какая-то конфигурация в IIS7 / 7.5, которую мне не хватает, чтобы заставить ее «видеть» знак плюс в URL, не пропуская последнее расширение, используемое для определения обработчика HTTP?
\+
?Ответы:
После поиска дополнительных комбинаций IIS и плюса, IIS7 [.5] настроен на отклонение URL со знаком плюс по умолчанию из-за боязни использования этого символа; этот символ все еще разрешен в строке запроса. Решение заключается в изменении атрибута requestFiltering по умолчанию на ,
<system><webServer><security><requestFiltering>
чтобы дважды закодированные символы с вызовом командной строки ( в конечном счете , модифицируя ASP.NET web.config):Это может быть немного более опасно, чем кто-либо предпочитает быть на их веб-сайте, но, похоже, не было способа быть более конкретным, чем тот, который позволяет. Предупреждения касались несоответствия, которое могло произойти между использованием плюса в URL и его типичным переводом в качестве пробела. Похоже, единственная альтернатива - вообще не использовать плюсовые символы в ваших URL.
источник
Я только что понял, как создать правило перезаписи, чтобы убедить IIS7 сопоставлять плюсы пробелам в URL. В моем случае это было для сохранения старых закладок или гиперссылок.
Смотрите мой блог для более подробной информации и ссылок.
источник