在 IIS7 中将 URL 从 https:// 重写为 http://
Posted
技术标签:
【中文标题】在 IIS7 中将 URL 从 https:// 重写为 http://【英文标题】:Rewriting URLs from https:// to http:// in IIS7 【发布时间】:2010-12-04 21:37:00 【问题描述】:我正在尝试从表单中重写 url:
https://example.com/about
表格
http://example.com/about
使用IIS7 URL rewriting:
<!-- http:// to https:// rule -->
<rule name="ForceHttpsBilling" stopProcessing="true">
<match url="(.*)billing/(.*)" ignoreCase="true" />
<conditions>
<add input="HTTPS" pattern="off" ignoreCase="false" />
</conditions>
<action type="Redirect" redirectType="Found" url="https://HTTP_HOSTREQUEST_URI" />
</rule>
<!-- https:// to http:// rule -->
<rule name="ForceNonHttps" stopProcessing="true">
<match url="(.*)billing/(.*)" ignoreCase="true" negate="true" />
<conditions>
<add input="SERVER_PORT" pattern="^443$" />
</conditions>
<action type="Redirect" redirectType="Found" url="http://HTTP_HOSTREQUEST_URI" />
</rule>
我很茫然;我一直在网上浏览示例并尝试我能想到的每一种语法。对于任何 https 请求,我指定的重写规则似乎根本 不起作用,就好像所有 https://
请求对重写引擎完全不可见。
规则工作正常;请参阅下面的答案。
【问题讨论】:
对我来说闻起来像一个基本的安全“功能” 这对我来说就像一个服务器故障问题...... @Charlie,没有。这是编码和管理的问题之一,所以把它留在它开始的网站上(就像很多脚本问题一样) 这确实是一个很好的配置 http 到 https 的示例,反之亦然。我只是在寻找这样的东西。尝试了其他几个,但他们遇到了一个或其他问题。 解决这个问题 - 没有有效的证书就无法完成,对吗?即,由于我没有安装证书,我无法强制 https 请求转到 http... 【参考方案1】:原来我将端口 :443 绑定到了不同的网站!
上述重写规则适用于 http:// 到 https:// 重写,反之亦然 - 尽管可能有更优化或更简单的方法来做到这一点。
把这个问题留在这里供以后的航海者寻找,因为我没有在网上看到很多关于 https:// 到 http:// 重写场景的好例子。
【讨论】:
我发现使用上述 https 到 http 规则导致我的 https 页面上的所有 css、javascript 和图像资源都被作为 http 获取。我删除了这条规则并添加了一个出站规则,将我的安全页面上的 a href 标记重写为 http://HTTP_HOST/R:0 以强制从 https 切换到 http。不会使用 https 意外手动导航到非安全页面,但这对我来说没问题 Pat James,我也遇到了这个问题。您介意分享您的出站规则吗? 谢谢你是一个救生员。 :))【参考方案2】:这个帖子有点老了,但我想回答一下。我正在使用 ASP.Net MVC3,上面 Fabio 的回答对我不起作用。我想出的处理 https 重定向到 http 的最简单解决方案,同时仍然允许有效的 https 页面请求安全内容,只是在我的 https/http 重定向上方添加白名单规则:
<rule name="WhiteList - content folder" stopProcessing="true">
<match url="^content/"/>
<conditions logicalGrouping="MatchAll" trackAllCaptures="false"/>
<action type="None"/>
</rule>
<rule name="Redirect to HTTPS" stopProcessing="true">
<match url="(.*)billing/(.*)" ignoreCase="true" />
<conditions>
<add input="HTTPS" pattern="^OFF$" />
</conditions>
<action type="Redirect" url="https://HTTP_HOST/billing/" redirectType="SeeOther" />
</rule>
<rule name="ForceNonHttps" stopProcessing="true">
<match url="(.*)billing/(.*)" ignoreCase="true" negate="true" />
<conditions>
<add input="SERVER_PORT" pattern="^443$" />
</conditions>
<action type="Redirect" redirectType="Found" url="http://HTTP_HOSTREQUEST_URI" />
</rule>
【讨论】:
【参考方案3】:请首先考虑 绑定 https 到您的网站,以使以下重定向模块正常工作是必不可少的(因此使用 self-signed 或 valid 绑定您的网络应用 证书)
web.config 中将 https 重定向到 http 的最后一部分:
<rewrite>
<rules>
<rule name="Force NonHTTPS" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="HTTPS" pattern="on" />
</conditions>
<action type="Redirect" url="http://HTTP_HOST/REQUEST_URI" />
</rule>
</rules>
</rewrite>
如果您在重写模块中需要等效的 IIS GUI,请参见下图
来源:查看tech-net 了解更多详细信息和分步指南。
【讨论】:
【参考方案4】:您的解决方案有效,但问题是:您的第二条指令杀死任何链接的第一条指令不是 (.)billing/(.),包括您的 css、js 和图像。
您可以使用此 https 到 http 规则:
<rule name="HTTPS to HTTP redirect" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="RequiresSSL:R:1" pattern="(.+)" negate="true" />
<add input="HTTPS" pattern="on" ignoreCase="true" />
<add input="REQUEST_URI" pattern="^(.+)\.(?!aspx)" negate="true" />
</conditions>
<action type="Redirect" redirectType="Found" url="http://HTTP_HOST/R:1" />
</rule>
【讨论】:
以上是关于在 IIS7 中将 URL 从 https:// 重写为 http://的主要内容,如果未能解决你的问题,请参考以下文章
xml url在iis7x及更高版本上将http重写为https重定向
从 iis7 中的 wordpress URL 中删除 index.php