У меня есть сервер IIS7, который действует как обратный прокси для нескольких других веб-серверов. Другие серверы работают на других портах, поэтому сервер IIS7 предоставляет «понятные URL-адреса», и все они работают на порту 80. Перезапись URL-адресов используется для передачи запроса внутреннему серверу.
Одним из таких серверов является TeamCity (сервер непрерывной интеграции и сборки). Этот сервер предоставляет способ загрузки результатов сборки («артефакты сборки»). Обычно эти артефакты представляют собой zip-архив. Вот пример URL:
Символы + в ASCOM+Telescope+Driver+for+AWR+6.0.40.825.zip
фактически являются пробелами в конечном имени файла; сервер TeamCity вставляет символы +.
При нажатии на эту ссылку я получаю следующую ошибку с сервера IIS7:
404 - файл или каталог не найден.
Ресурс, который вы ищете, мог быть удален, изменилось его название или временно недоступен.
Фактический URL-адрес, отображаемый в файле журнала IIS7:
/repository/download/bt25/4164:id/ASCOM+Telescope+Driver+for+AWR+6.0.40.825.zip
Правило перезаписи соответствует шаблону (.*)
и перезаписывает URL-адрес, используя
А теперь самое интересное. Если я вернусь в свой браузер и отредактирую эти символы +, тщательно заменив их пробелами, тогда URL-адрес будет работать!
Я прихожу к выводу, что перезапись URL почему-то не работает для этих + символов. Это известная проблема? Какие-либо предложения?
Как уже ответил h0tw1r3, вам нужно отключить проверку URL.
Если вы хотите сделать это на Уровень сервера IIS затем используйте команду ниже:
%windir%\system32\inetsrv\appcmd set config /section:requestfiltering /allowdoubleescaping:true
Если вы хотите отключить его только на уровень приложения, то вам нужно просто добавить следующий раздел в файл web.config:
<system.webServer>
<security>
<requestFiltering allowDoubleEscaping="true" />
</security>
</system.webServer>
Символ «+» действительно не является допустимой кодировкой URL для пробела. TeamCity должен кодировать их как% 20.
В любом случае ошибка, вероятно, является результатом распространенного requestFiltering настройка безопасности в IIS7.
Попробуйте следующую команду:
%windir%\system32\inetsrv\appcmd set config /section:requestfiltering /allowdoubleescaping:true
Это должно помешать IIS возвращать 404 для всего, что имеет + в URL-адресе.