У меня есть веб-сервер IIS7 с несколькими запущенными сайтами. Некоторые из сайтов являются субдоменами одного домена, а другие - полностью отдельными доменами. Я хочу использовать перезапись IIS для перенаправления всех сайтов поддоменов одного домена на https, но я хочу, чтобы остальные домены оставались такими, какие они есть. Например, на одном веб-сервере у меня есть следующие сайты:
one.test.com, two.test.com, otherdomain.com
И я хочу настроить глобальную перезапись IIS для перенаправления http://one.test.com и http://two.test.com на https, но это не повлияет на otherdomain.com.
Вот что у меня есть до сих пор, и когда я протестировал регулярное выражение, оно кажется правильным, но не перенаправляет сайты поддоменов:
<rewrite>
<globalRules>
<rule name="Redirect to HTTPS" enabled="true" stopProcessing="true">
<match url="(.*)(\.test\.com)" />
<conditions logicalGrouping="MatchAny">
</conditions>
<action type="Redirect" url="https://{R1}{R2}" redirectType="SeeOther" />
</rule>
</globalRules>
</rewrite>
Я слишком усложняю это или упускаю что-то очевидное?
Ура.
Вам нужно добавить условия которые соответствуют HTTP_HOST вашему правилу (переменная url в URL Rewrite не включает имя хоста).
<globalRules>
<rule name="Redirect to HTTPS" enabled="true" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTP_HOST}" pattern="(.+)\.test\.com" />
</conditions>
<action type="Redirect" url="https://{C:0}/{R:0}" />
</rule>
</globalRules>
Это правило должно перенаправлять все запросы на * .test.com на HTTPS.
Вы должны добавить это условие <add input="{HTTPS}" pattern="off" />
в приведенном выше решении. В противном случае он завершится циклом. Итак, правило будет следующим:
<globalRules>
<rule name="Redirect to HTTPS" enabled="true" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="off" />
<add input="{HTTP_HOST}" pattern="(.+)\.test\.com" />
</conditions>
<action type="Redirect" url="https://{C:0}/{R:0}" />
</rule>
</globalRules>