IIS web.config在开发环境中重定向// www和HTTPS

时间:2017-08-02 21:31:42

标签: c# asp.net-mvc ssl iis

我有一个.NET MVC 5网站,我目前正在强制使用https并使用我的生产环境中的web配置(使用有效的证书)将www更改为非www。这很好用。我也有两个开发环境。这些环境设置了自签名证书,我想在这些环境中强制https并将www更改为非www。

<rewrite>
  <rules>
    <rule name="Redirect any HTTP request to HTTPS with no www" patternSyntax="ECMAScript" stopProcessing="true">
      <match url=".*"></match>
      <conditions >
        <add input="{HTTP_HOST}" pattern="^(.*)?website.com$"></add>
        <add input="{HTTPS}" pattern="off"></add>
      </conditions>
      <action type="Redirect" url="https://website.com/{R:0}" redirectType="Permanent" appendQueryString="true"></action>
    </rule>
    <rule name="Redirect https www to HTTPS with no www" patternSyntax="ECMAScript" stopProcessing="true">
      <match url=".*"></match>
      <conditions >
        <add input="{HTTP_HOST}" pattern="^www.website.com$"></add>
        <add input="{HTTPS}" pattern="on"></add>
      </conditions>
      <action type="Redirect" url="https://website.com/{R:0}" redirectType="Permanent" appendQueryString="true"></action>
    </rule>
  </rules>
</rewrite>

但是,我目前的实施检查&#34; HTTPS&#34; =关/开,总是&#34;关&#34;在我的开发环境中,因为他们没有有效的证书。这会导致无限重定向循环(Chrome中的TOO_MANY_REDIRECTS错误)。我已经尝试了所有可以检查的宏({URL},{REQUEST_URL},{HTTP_HOST}等等),但这些都不是完全限定的URL(即:&#34; http://website.dev/whatever&#34)。如果我有这个,我可以检查是否有人 尝试 来使用https或http。

这不是什么大不了的事,但我已经花了太多时间在上面,哈哈!任何想法都表示赞赏!

1 个答案:

答案 0 :(得分:1)

{CACHE_URL}变量包含完整的网址。您可以使用该变量构建条件,而不是{HTTPS}。看起来应该是这样的:

相反:

<add input="{HTTPS}" pattern="off"></add>

使用:

<add input="{CACHE_URL}" pattern="^http://" />

而是:

<add input="{HTTPS}" pattern="on"></add>

使用:

<add input="{CACHE_URL}" pattern="^https://"  />