[asp.net-mvc]"非 www 到 www"和"https"重写 web.config 但不是 localhost ASP.NET MVC 中的规则

发布时间: 2017/3/25 2:03:33
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

以下的重写规则在 web.config 我的 ASP.NET MVC 5 项目︰

<rule name="Redirect example.com to www.example.com and enforce https" enabled="true" stopProcessing="true">
    <match url="(.*)" />
    <conditions logicalGrouping="MatchAny">
        <add input="{HTTP_HOST}" pattern="^[^www]" />
        <add input="{HTTPS}" pattern="off" />
    </conditions>
    <action type="Redirect" url="https://www.example.com/{R:1}" appendQueryString="true" redirectType="Permanent" />
</rule>

该规则将非 www 重定向到 www 和 http 为 https (所以东西喜欢 http://example.com/hey 将重定向到 https://www.example.com/hey ),工作正常。它也适用于 localhost ,我似乎不能能够变通解决它 — — 我试过否定规则和正则表达式包含 | 但似乎不能找到正确的组合。我接近这错了吗?

解决方法 1:

conditions 块你可以使用属性 negate="true" 。如果设置了该属性和条件相匹配,则不会应用重写规则。

描述的 negateIIS.net属性︰

一种模式可以通过使用负片属性元素的否定。当使用此属性时,只有当前的 URL 与指定的模式不匹配才能执行该规则操作。

因为您正在使用 MatchAny ,添加额外的属性将不匹配,因为至少一个条件会碰上。我推荐使用 2 具体的重写规则与 logicalGrouping="MatchAll" ,每个是只是负责单一的案例︰

<rule name="enforce https" enabled="true" stopProcessing="true">
    <match url="(.*)" />
    <conditions logicalGrouping="MatchAll">
        <add input="{HTTPS}" pattern="off" />
        <add input="{HTTP_HOST}" matchType="Pattern" 
              pattern="^localhost(:\d+)?$" negate="true" />
    </conditions>
    <action type="Redirect" url="https://{HTTP_HOST}/{R:1}"
          appendQueryString="true" redirectType="Permanent" />
</rule>
<rule name="Redirect example.com to www.example.com"
       enabled="true" stopProcessing="true">
    <match url="(.*)" />
    <conditions logicalGrouping="MatchAll">
        <add input="{HTTP_HOST}" pattern="^[^www]" />
        <add input="{HTTP_HOST}" matchType="Pattern" 
              pattern="^localhost(:\d+)?$" negate="true" />
    </conditions>
    <action type="Redirect" url="https://www.example.com/{R:1}"
         appendQueryString="true" redirectType="Permanent" />
</rule>     
赞助商