【问题标题】:Force Https on an ASP.NET app running on IIS 7.5在 IIS 7.5 上运行的 ASP.NET 应用程序上强制使用 Https
【发布时间】:2011-09-27 06:25:30
【问题描述】:

我在我的 web.config 文件中使用以下代码在我的整个网站上强制使用 SSL;

<system.webServer>
    <rewrite>
        <rules>
            <rule name="Redirect HTTP to HTTPS" stopProcessing="true">
                <match url="(.*)"/>
                <conditions>
                    <add input="{HTTPS}" pattern="^OFF$"/>
                </conditions>
                <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="SeeOther"/>
            </rule>
        </rules>
    </rewrite>
</system.webServer>

但我想做的是只强制 ssl 使用 ~/purchase/~/account/ 路径及其下。匹配的网址应该是什么?

注意 正则表达式在这里也适用于我以及通配符。

【问题讨论】:

  • 哦,天哪。在 stackoverflow.com 就足够了。这个话题怎么可能是off topic?如果有人投票将此作为离题问题结束,那么他/她对编程一无所知。如果您投票决定关闭,请尊重并发表评论解释原因!

标签: asp.net regex iis iis-7 https


【解决方案1】:

您应该使用这种模式(这适用于/purchase/something 以及/account/something-else):

^((purchase|account)/.*)$

您必须记住,该 URL 不应有前导斜杠 /

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="Force HTTPS" stopProcessing="true">
                    <match url="^((purchase|account)/.*)$" />
                    <conditions>
                        <add input="{HTTPS}" pattern="^OFF$" />
                    </conditions>
                    <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

【讨论】:

  • @tugberk 抱歉,我不明白你的问题。最终 URL 将与原始 URL 相同,只是 HTTPS 协议而不是 HTTP。该规则将仅针对存在 purchase/account/ 部分的 URL 触发。
  • 嗯,好的。我作为评论提出的问题很愚蠢。忽略它。我会试一试的。
  • @LazyOne, ?
  • @cracker ^off$ 是正则表达式中的完全匹配,而off 仅表示字符串中的任意位置 序列。但是是的——考虑到HTTPS 字段应该只有ONOFF 作为值,所以不存在差异。
  • @LazyOne,谢谢好友,现在我得到了他的。您能否建议我是否要为其他链接添加 HTTP,然后 www.mysite.com/purchase/login 包含其他的 Word,然后在 URL 中为所有链接和导航添加购买。我该怎么做?
【解决方案2】:

你会做这样的事情(为简单起见,有两条单独的规则)

  <match url="/purchase/(.*)"/>

【讨论】:

  • 我们可以这样吗:&lt;match url="/purchase|account/(.*)"/&gt;
  • 我们可以这样做:&lt;match url="/purchase|account/(.*)"/&gt; 但是重定向 url 会是什么样子? url="https://{HTTP_HOST}/{R:1}"
  • 好的,为此:&lt;match url="/account/(.*)"/&gt; 尝试了以下重定向网址,但没有成功; url="https://{HTTP_HOST}/account/{R:1}"
猜你喜欢
  • 2012-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-28
  • 2012-12-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多