我有一个.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。
这不是什么大不了的事,但我已经花了太多时间在上面,哈哈!任何想法都表示赞赏!
答案 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://" />