我们在Azure上部署了一个使用https的Web角色。由于这是我们希望用户访问系统的唯一方式,因此我们希望将访问http版本的用户转发到https版本。
我们尝试了here建议。
即,我们在web.config中添加了以下内容:
<system.webServer>
<rewrite>
<rules>
<rule name="HTTP to HTTPS redirect" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="off" ignoreCase="true" />
</conditions>
<action type="Redirect" redirectType="Found" url="https://{HTTP_HOST}/{R:1}" />
</rule>
</rules>
</rewrite>
但是,这似乎不起作用。有谁知道如何做到这一点?这似乎是一个共同的要求......
答案 0 :(得分:22)
Smarx刚刚再发一篇关于此事的博客文章;)
http://blog.smarx.com/posts/redirecting-to-https-in-windows-azure-two-methods
如果网站出现故障,请点击摘要:
IIS网址重写
如果您不使用ASP.NET MVC但使用IIS(如在Web角色中),则可以使用默认安装的URL Rewrite module。使用此模块重定向到HTTPS是相当简单的,并在其他地方记录,但让一切在本地计算模拟器中正常工作是非常重要的。特别是,您会发现大多数示例都假设HTTP流量始终位于端口80上,在计算模拟器下进行测试时并非总是如此。这是一个似乎在本地和云中工作的规则:
<system.webServer>
<rewrite>
<rules>
<rule name="Redirect to HTTPS">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="off" ignoreCase="true" />
<add input="{URL}" pattern="/$" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
</conditions>
<action type="Redirect" url="https://{SERVER_NAME}/{R:1}" redirectType="SeeOther" />
</rule>
</rules>
</rewrite>
答案 1 :(得分:6)
刚刚加入Kevin Cloet对Smarx博客的回答。要仅在发布模式下设置RequireHttps属性, 你可以使用HttpContext.Current.IsDebuggingEnabled
public static void RegisterGlobalFilters(GlobalFilterCollection filters) {
if (!HttpContext.Current.IsDebuggingEnabled) {
filters.Add(new RequireHttpsAttribute());
}
}
答案 2 :(得分:3)
添加到此处已提到的答案。 一旦你想到这一点就很明显,但是当我第一次阅读这篇文章时,这对我来说并非如此。
您必须确保打开端口80并通过ServiceDefinition文件将其绑定到您的站点,以便工作。
示例条目如下:
<Sites>
<Site name="Web" physicalDirectory=".\SitesRoot">
<VirtualDirectory name="www" physicalDirectory=".\SitesRoot\dist" />
<Bindings>
<Binding name="HttpsEndpoint" endpointName="HttpsEndpoint" />
<Binding name="HttpEndpoint" endpointName="HttpEndpoint" />
</Bindings>
</Site>
</Sites>
<Endpoints>
<InputEndpoint name="HttpsEndpoint" protocol="https" port="443" certificate="MY_SSL_CERT.pfx" />
<InputEndpoint name="HttpEndpoint" protocol="http" port="80" />
</Endpoints>
答案 3 :(得分:2)
最简单的方法是安装Redirect HTTP to HTTPS扩展程序。
要安装它,请从仪表板打开Web App,然后单击Extensions选项卡。
搜索Redirect HTTP to HTTPS
并安装。
那就是它。没有设置或复杂的配置说明