У меня есть два сайта на моем сервере IIS7, один PROD и один TEST. PROD привязан по умолчанию 443 и 80, TEST привязан к 8443 и 8080.
На обоих сайтах я хочу иметь следующее перенаправление URL:
На PROD:
http://example.com/club -> / Club / ClubUser
https://example.com/club -> / Club / ClubUser
В ТЕСТЕ:
http://example.com:8080/club -> / Club / ClubUser
https://example.com:8443/club -> / Club / ClubUser
Так что в принципе, в любом случае, я просто хочу изменить URI. В протоколе нет изменений, я не хочу перенаправлять трафик http на https.
На обоих сайтах у меня определены одинаковые правила перезаписи URL, см. Ниже. Перенаправление работает нормально для 3 случаев из 4 и не работает для этого одного случая:
https://example.com/club -> / Club / ClubUser
Вместо этого происходит следующее перенаправление (поэтому HTTPS перенаправляется на http):
https://example.com/club -> http://example.com/Club/ClubUser
После выполнения всех видов тестов кажется, что, когда порт присутствует в URL, перенаправление происходит правильно. Когда порт используется по умолчанию, он будет перенаправлен на URL-адрес http, но я не понимаю причину.
Правила определены следующим образом на обоих сайтах:
<rule name="Club redirect HTTP" patternSyntax="ExactMatch" stopProcessing="true">
<match url="club" />
<conditions logicalGrouping="MatchAny">
<add input="{HTTPS}" pattern="off" />
</conditions>
<action type="Redirect" url="http://{SERVER_NAME}:{SERVER_PORT}/Club/ClubUser" appendQueryString="false" />
</rule>
<rule name="Club redirect HTTPS" patternSyntax="ExactMatch" stopProcessing="true">
<match url="club" />
<conditions logicalGrouping="MatchAny">
<add input="{HTTPS}" pattern="on" />
</conditions>
<action type="Redirect" url="https://{SERVER_NAME}:{SERVER_PORT}/Club/ClubUser" appendQueryString="false" />
</rule>
Я попытался использовать {HOST_NAME} вместо {SERVER_NAME}: {SERVER_PORT}, но это также не помогло.