Могу ли я поместить знак + в папку с IIS?
Я уверен, что этого не может быть сделано, но я ищу хак или способ поместить + в имя папки, например
http://www.mysite.com/cats+dogs/Default.aspx
Я использую IIS 7 и попытался создать виртуальный каталог для этого, и это не сработало. Мне не разрешено помещать% 2B в папку проводника или имя виртуальной папки.
Любые идеи, как я мог взломать это, чтобы заставить его работать? У нас уже были брошюры, напечатанные с использованием URL-адреса, и задаваясь вопросом, есть ли способ, которым я могу это сделать, или какой-нибудь трюк, который мог бы это сделать.
EDIT: я смог понять это, создав виртуальную папку с + в ней, а затем перенаправляя URL-адрес, который указывает на виртуальный каталог с содержимым.
Ответы
Ответ 1
Возможно, вам удастся сделать url-rewrite. Это можно сделать очень легко в web.config или с помощью httpmodule.
Похоже, вам все равно нужно использовать пробел или исправление IIS, упомянутое ниже, для вашей проблемы с символом +, но для некоторой гибкости в будущем вы всегда можете включать перезаписи URL для сопоставления URL-адресов в файлы.
<httpModules>
<add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</httpModules>
<rewriter>
<rewrite url="~/cats dogs/Default.aspx" to="~/MyRealFile.aspx" />
</rewriter>
Ответ 2
IIS 7.0 Нарушение изменений для приложений ASP.NET 2.0 в интегрированном режиме
Здесь приведена соответствующая выдержка со страницы, на которой показано обходное решение /fix.
Ограничения запроса и обработка URL-адресов. следующие изменения произошли из-за дополнительные ограничения на то, как IIS обрабатывает входящие запросы и их URL-адрес.
11) Запросить URL-адреса, содержащие некодированные Символы "+" на пути (не querystring) отклоняется по умолчанию
Вы получите сообщение об ошибке HTTP 404.11 - Не найдено: фильтрация запроса модуль настроен на отклонение запроса который содержит двойной выход последовательность.
Эта ошибка возникает, поскольку IIS по умолчанию настроено на отклонение попыток дважды закодировать URL-адрес, который обычно представляют собой попытку выполнить атака канонизации.
Обход проблемы:
1) Приложения, требующие использования символа "+" в URL-адресе может отключить эту проверку, установив атрибут allowDoubleEscaping в system.webServer/безопасность/requestFiltering конфигурации в приложения web.config. Однако, это может сделать ваше приложение более уязвим для злонамеренных URL-адресов:
<system.webServer>
<security>
<requestFiltering allowDoubleEscaping="true" />
</security>
</system.webServer>
Ответ 3
Просто поместите пробел в имя папки: "cats dogs".
Символ пробела кодируется с использованием символа плюса, поэтому, когда сервер видит символ плюса, он получит папку с пространством в ней.