Могу ли я поместить знак + в папку с 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".

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