我需要将http请求重定向到https。但只有当我的网站通过普通网址访问时。即www.accufinance.com
当我在调试中访问本地时,我使用localhost进行连接 - 并且不希望重写发生(因为我没有在本地使用SSL)。
我正在尝试这个:
<rewrite>
<rules>
<clear />
<rule name="Redirect to https" stopProcessing="true">
<match url="^accufinance.com$" ignoreCase="true"/>
<conditions>
<add input="{HTTPS}" pattern="off" ignoreCase="true" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="Permanent" appendQueryString="false" />
</rule>
</rules>
</rewrite>
但重写规则并没有发生。如果我使用(。*)作为匹配URL,它可以正常工作,但捕获所有连接。如果有'accufinance.com&#39;在URL?
答案 0 :(得分:2)
正则表达式^accufinance.com$
极具限制性。 ^
表示它必须一直匹配到开头(即在它之前没有其他任何内容),而$
要求没有任何内容一直跟着它结束。因此,仅当请求网址正好为accufinance.com
时才会成功匹配。
尝试删除^
和$
。或者,您可以在所需过滤器之前和之后明确允许部分网址,如.*accufinance\.com.*
。
答案 1 :(得分:2)
您需要检查HTTP_HOST
条件是否符合您的域名
match
param的指令url
仅包含您域名之后的内容。
示例:http://www.domain.tld/some/url/here.ext
HTTP_HOST
= www.domain.tld
REQUEST_URI
= /some/url/here.ext
您可以使用此规则执行您想要的操作
<rule name="Redirect to https" stopProcessing="true">
<match url=".*" ignoreCase="true" />
<conditions>
<add input="{HTTP_HOST}" pattern="^(www\.)?accufinance\.com$" ignoreCase="true" />
<add input="{HTTPS}" pattern="off" ignoreCase="true" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="Permanent" appendQueryString="false" />
</rule>
请注意,在再次尝试之前,您需要清除浏览器的缓存(由于您的永久重定向,您的旧规则仍在缓存中)