日期:2019-08-23 浏览次数:4066 次
由于谷歌宣布他们将对安全网站进行排名提升,我最近不得不将一些网站转换为HTTPS / SSL。
我正在运行带有IIS 7和.NET 4.5的Windows 2008服务器,我使用IIS URL Rewrite 2.0为从http到https的所有请求设置301重定向,您可以使用Microsoft Web Platform Installer安装IIS URL Rewrite 2.0,它的安装速度仅为6.1mb。这是我添加到web.config文件的<system.webServer>部分的规则:
<rewrite>
<rules>
<rule name="Redirect everything to http:// on www domain" patternSyntax="Wildcard" stopProcessing="true">
<match url="*" />
<conditions logicalGrouping="MatchAny">
<add input="{HTTP_HOST}" pattern="www.[DOMAIN].com" negate="true" />
<add input="{HTTPS}" pattern="off" ignoreCase="true" />
</conditions>
<action type="Redirect" url="http://www.[DOMAIN].com/{R:0}" redirectType="Permanent" />
</rule>
</rules>
</rewrite>
设置从http到https的自动重定向后,您可能会开始看到有关“ 不安全内容 ”或“ 混合内容 ”的浏览器警告,并且某些内容可能会被阻止而不会显示,这是因为您的html中的某些外部内容引用仍在使用一个不安全的“http://”网址。外部内容可以包括脚本引用,css样式表,图像,视频等。
有几种方法可以解决此问题:
如果您需要使用选项2(就像我一样),那么您可以再次使用IIS URL Rewrite 2.0来动态更新html中的所有外部内容引用,以便在将其发送到浏览器之前使用HTTPS / SSL。
我使用以下出站规则在所有脚本,链接(css),img和视频标记中将“http://”替换为“https://”。视频标记未包含在URL重写的预定义标记中,因此我将其添加为自定义标记,您可以扩展规则以包含您需要的任何其他标记。
<rewrite>
...
<outboundRules>
<rule name="Rewrite external references to use HTTPS" preCondition="IsHTML">
<match filterByTags="Script, Link, Img, CustomTags" customTags="HTML5Tags" pattern="^http://(.*)$" />
<action type="Rewrite" value="http://{R:1}" />
</rule>
<preConditions>
<preCondition name="IsHTML">
<add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
</preCondition>
</preConditions>
<customTags>
<tags name="HTML5Tags">
<tag name="Video" attribute="src" />
</tags>
</customTags>
</outboundRules>
</rewrite>
这适用于在IIS 7或更高版本上运行的任何网站,包括使用ASP.NET MVC3,MVC4,MVC5和Web窗体开发的网站。