Я бился головой о кирпичную стену, пытаясь заставить работать некоторые правила перенаправления IIS. Я искал и читал здесь, на Stack Overflow и на IIS.net, но это вообще не работает.
Я пробую его на своем локальном (реальном) IIS, у меня установлен модуль rewrite 2.0, и я попытался выполнить на нем ремонтную установку. Я выполнял iisreset в строке командной строки администратора больше раз, чем мне хотелось бы упомянуть.
В моем файле hosts я настроил 127.0.0.1 для URL my.test.com.
То, что я хочу достичь, - это перенаправление URL-адреса поддомена на URL-адрес основного домена с дополнительным параметром строки запроса при сохранении существующих значений пути и строки запроса, если они существуют.
Я устанавливаю 3 правила, которые находятся в корневой папке веб-сайта, следующим образом:
<system.webServer>
<rewrite>
<rules>
<rule name="PathAndQueryString" enabled="true" stopProcessing="true">
<match url="(/\w*)(\?\w*=\w*)([&\w*=\w*]*)" />
<action type="Redirect" url="https://www.test.com{R:1}{R:2}{R:3}&param=value" appendQueryString="false" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{HTTP_HOST}" pattern="my.test.com" />
</conditions>
</rule>
<rule name="Querstring" enabled="true" stopProcessing="true">
<match url="(\?\w*=\w*)([&\w*=\w*]*)" />
<action type="Redirect" url="https://www.test.com{R:1}{R:2}&param=value" appendQueryString="false" />
<conditions>
<add input="{HTTP_HOST}" pattern="my.test.com" />
</conditions>
</rule>
<rule name="DomainOnly" enabled="true" stopProcessing="true">
<match url=".*" />
<action type="Redirect" url="https://www.test.com?param=value" appendQueryString="false" />
<conditions>
<add input="{HTTP_HOST}" pattern="my.test.com" />
</conditions>
</rule>
</rules>
</rewrite>
</system.webServer>
К сожалению, несмотря на тестирование шаблонов и подтверждение правильности захвата {R: x}, когда я пытаюсь проверить это с помощью Edge, Chrome, Firefox и IE для всех из них, IIS действует так, как будто правил не существует.
Тесты:
- https://my.test.com >> https://www.test.com?param=value
- https://my.test.com/SomePath >> https://www.test.com/SomePath
- https://my.test.com/SomePath?AParam=AValue >> https://www.test.com/SomePath?AParam=AValue¶m=value
Ни один из вышеперечисленных тестов не работает, они обслуживаются без перенаправления.
Я также пробовал использовать шаблон условия как часть шаблона Match URL, но и с этим он не работал; Фактически, я переместил его в состояние после прочтения сообщения о переполнении стека, в котором говорилось, что когда правила находятся в корне сайта, он не включает хост, но по-прежнему ничего не работает.
Любая помощь приветствуется.
ОБНОВЛЕНИЕ 1: для правила пути и строки запроса попытался удалить выделенную жирным шрифтом часть в начале этого шаблона (/ \ w *). Никакого эффекта.
ОБНОВЛЕНИЕ 2: Пытался включить чрезвычайно темпераментную функцию «Отслеживание неудачных запросов», и когда она действительно работает, она говорит, что ни один из шаблонов URL сопоставления не соответствует, за исключением третьего правила, которое теперь начало действовать. и перенаправление, но не поддерживает путь и другие параметры строки запроса по очевидным причинам.
ОБНОВЛЕНИЕ 3: в Edge и IE ни одно из правил вообще не работает. В Chrome и FF перенаправление только домена работает, однако, если я отключу правило только домена и перезапущу IIS, он будет действовать так, как будто правило все еще существует - FFS дает мне силы, это дерьмо действительно начинает кипеть в моей крови - это не должно быть так чертовски сложно.