Перезапись URL с помощью UrlRewritingNet завершается ошибкой с символом + в URL - PullRequest
1 голос
/ 29 сентября 2010

Я использую UrlRewritingNet в Umbraco, чтобы выполнить базовую перезапись URL-адресов для продуктов и категорий. Все нормально на моей локальной машине (Visual Studio dev-webserver) и на нашем внутреннем сервере разработки (Window Server 2008 с ISS 7, 32 бит). Но происходит сбой на производственном сервере, который является Window Server 2008 R2 с IIS 7 (64-разрядная версия). Симптом заключается в том, что правило перезаписи не запускается. Сервер просто выдает мне ошибку 404.

Правило переписывания выглядит следующим образом:

<add name="CategoryRewrite"
     virtualUrl="^/products/(.*)/(.*).aspx"
     rewriteUrlParameter="ExcludeFromClientQueryString"
     destinationUrl="~/default.aspx?umbPage=1&amp;maincategory=$1&amp;subcategory=$2"
     ignoreCase="true"/>

URL выглядит следующим образом - это не работает:

http://example.net/products/category+name/sub+category.aspx

Если я изменю URL-адрес на следующий, он будет работать во всех трех средах:

http://example.net/products/category%20name/sub%20category.aspx

Понятно, что регулярное выражение в атрибуте virtualUrl завершается ошибкой, когда + используется для пробела. Но я должен признать, что я могу понять, почему регулярное выражение не работает только на сервере Windows 2008 R2.

Я ищу информацию о различиях между Windows Server 2008 R2 и 2 другими средами. Что я должен искать?

Я подтвердил, что System.Web.RegularExpressions.dll является той же версией на серверах.

Ответы [ 2 ]

1 голос
/ 04 октября 2010

Проблема в том, что фильтр запросов IIS7 отклоняет URL-адреса, содержащие символы +. Решением является добавление в ваш Web.config следующего:

<configuration>
 <system.webServer>
  <security>
   <requestFiltering allowDoubleEscaping="true" />
  </security>
 </system.webServer>
</configuration> 

Для более подробной информации: http://blogs.iis.net/thomad/archive/2007/12/17/iis7-rejecting-urls-containing.aspx

Сотрудник получил блестящую идею запустить веб-сайт на своем собственном IIS. А затем ошибка была далее определена как 404.11, и с этого момента решение было простым.

0 голосов
/ 29 сентября 2010

Это кажется странным, потому что ваше регулярное выражение также соответствует символам «+».Возможно, проблема в том, что первый символ в регулярном выражении, начало строки '^', которую вы используете.Возможно, на рабочем сервере вы получаете абсолютный URL, а на вашем сервере среды разработки относительный URL передается в модуль перезаписи.

...