Перезапись URL с UrlreWritingNET не удается с A + Char в URL
-
26-09-2019 - |
Вопрос
Я использую 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&maincategory=$1&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 проходил в модуль перезаписи.