URL在某些URL上重写为https

时间:2014-09-19 23:02:05

标签: http https url-rewriting

我需要将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?

2 个答案:

答案 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>

请注意,在再次尝试之前,您需要清除浏览器的缓存(由于您的永久重定向,您的旧规则仍在缓存中)