我有一个使用URL Rewrite运行IIS7.5的Windows 2008服务器。
我有一个网址,并希望此网址的所有排列都重定向到带有www的安全https版本。例如,我想要以下内容:
重定向到:
我已经设置了3条重写规则,但遗憾的是我无法让https://mydomain.ext重定向。
以下是我使用的重写,中间的重写不起作用。但是,我宁愿用一条规则来涵盖所有实例。
<!-- Redirect http non www to https www -->
<rule name="Redirect http://mydomain.ext to www" patternSyntax="Wildcard" stopProcessing="true">
<match url="*" />
<conditions>
<add input="{HTTP_HOST}" pattern="mydomain.ext" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}/{R:1}" appendQueryString="true" redirectType="Permanent" />
</rule>
<!-- Redirect https non www to http www -->
<rule name="Redirect https://mydomain.ext to www" patternSyntax="Wildcard" stopProcessing="true">
<match url="*" />
<conditions>
<add input="{HTTP_HOST}" pattern="https://mydomain.ext" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}/{R:1}" appendQueryString="true" redirectType="Permanent" />
</rule>
<!-- Redirect http to https -->
<rule name="Redirect http to https" enabled="true">
<match url="(.*)" ignoreCase="false" />
<conditions>
<add input="{HTTPS}" pattern="off" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}/{R:1}" appendQueryString="true" redirectType="Permanent" />
</rule>
答案 0 :(得分:0)
上述规则的问题在于协议(https)永远不是主机(HTTP_HOST)的一部分,因此您的规则永远不会匹配。您只需要两个规则,但要确保它们是第一个并停止处理规则(因为重定向通常应该停止它们)。所以这应该工作。请注意,另一个关键的事情是使用&#34;使用^和$&#34;进行完整字符串匹配,您还可以执行反向操作,将所有非特定域重定向到它(请参阅底部):
<!-- Redirect http to https -->
<rule name="Redirect http to https" enabled="true" stopProcessing="true">
<match url="(.*)" ignoreCase="false" />
<conditions>
<add input="{HTTPS}" pattern="off" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}/{R:1}" appendQueryString="true" redirectType="Permanent" />
</rule>
<!-- Redirect http non www to https www -->
<rule name="Redirect mydomain.ext to www" stopProcessing="true">
<match url="*" />
<conditions>
<add input="{HTTP_HOST}" pattern="^mydomain.ext$" />
</conditions>
<action type="Redirect" url="https://www.{HTTP_HOST}/{R:1}" appendQueryString="true" redirectType="Permanent" />
</rule>
如果您100%确定只想使用某个域,而不是其他任何方式,则可以停止使用该域的所有排列并使用此方法重定向到规范的排列(而不是上面的第二个规则,在此使用否定的案例)
<rule name="Mydomain" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTP_HOST}" pattern="^www.mydomain.ext$" negate="true" />
</conditions>
<action type="Redirect" url="https://www.mydomain.ext/{R:1}" />
</rule>