.NET中的URL重写规则强制www但忽略http(s)

时间:2017-07-19 09:32:58

标签: url-rewriting web-config url-rewrite-module

我希望在我的web.config文件中设置重写规则,强制网址使用“www”子域。这样做是这样的:

<rules>
    <rule name="Add WWW" stopProcessing="true">
    <match url="^(.*)$" />
    <conditions>
       <add input="{HTTP_HOST}" pattern="^(?!www\.)(.*)$" />
    </conditions>
    <action type="Redirect" url="http://www.{C:0}{PATH_INFO}" redirectType="Permanent" />
 </rule>

但是,该项目在多个域上运行多个网站,其中一些使用SSL而另一些则不使用。

上面的代码将http://硬编码到重定向中。我想要做的是抽象它,以便在重定向期间维护http或https协议而不进行硬编码。

所需结果的一些例子是:

非常感谢。

1 个答案:

答案 0 :(得分:0)

我找到了一个reference,解释了这样做的一种方法。它使用重写键/值对作为变量&#39;在动作网址中,(据我所知)目前无法将协议作为规则内的原生变量获取。

规则已经修改如下,应该按照要求进行修改:

<rewrite>
    <rules>
          <rule name="Add www maintain https" stopProcessing="true">
          <match url="^(.*)$" />
          <conditions>
             <add input="{HTTP_HOST}" pattern="^(?!www\.)(.*)$" />
          </conditions>
          <action type="Redirect" url="{MapSSL:{HTTPS}}www.{C:0}{PATH_INFO}" redirectType="Permanent" />
       </rule>
    </rules>
    <rewriteMaps>
        <rewriteMap name="MapSSL" defaultValue="http://">
            <add key="ON" value="https://" />
            <add key="OFF" value="http://" />
        </rewriteMap>
    </rewriteMaps>
</rewrite>

还有另一个reference,其中包括以其他方式实现同​​样的目标。