Вопрос

Я использую URLREWARITENTNET в Umbraco, чтобы сделать базовый URL-дракаты продукта и URL-адресов категории. Все в порядке на моей местной машине (Visual Studio dev-Webserver) и на нашем внутреннем сервере разработки (Window Server 2008 с ISS 7, 32 бит). Но он не удается на производственном сервере, который является окно сервером 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 не удается при использовании + для пространственного символа. Но я должен признать, что я могу понять, почему Regex не удается только на сервере Windows 2008 R2.

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

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

Это было полезно?

Решение

Проблема в том, что фильтр 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-conting.aspx.

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top