Web Config [=10th=] 在 IIS 中重写

WebConfig URL Rewrites in IIS

有一个 ASP.NET 解决方案并希望实现两件事:-

  1. 将 www.mydomain.com 重定向到 mydomain.com
  2. 有友善URL

所以...这是我添加的 webconfig 的 system.webserver 部分...

 <rewrite>
      <rules>
        <rule name="Remove WWW prefix" >
          <match url="(.*)" ignoreCase="true" />
          <conditions trackAllCaptures="false">
            <add input="{HTTP_HOST}" pattern="^www\.mydomain\.com" />
          </conditions>
          <action type="Redirect" url="{MapProtocol:{HTTPS}}://mydomain.com/{R:1}" redirectType="Permanent" />
        </rule>
        <rule name="homepage" stopProcessing="true" >
          <match url="^/wwwzone/homepage.aspx$"/>
          <action type="Redirect" url="/"/>
        </rule>
      <rule name="homepageReal" stopProcessing="true" >
        <match url="^/$"/>
        <action type="Rewrite" url="/somepath/homepage.aspx"/>
      </rule>
      </rules>
      <rewriteMaps>
        <rewriteMap name="MapProtocol">
          <add key="on" value="https"/>
          <add key="off" value="http"/>
        </rewriteMap>
      </rewriteMaps>
    </rewrite>

这失败了。这背后的逻辑是:-

非常感谢任何想法。

原来我的正则表达式语法很差。

所以,匹配首页的真实URL应该是

<match url="^$"/>

不是

<match url="^/$"/>

而后续规则重写为真实URL应该以同样的方式改变。

因此,为了完整起见,这个有效...

<rewrite>
      <rules>
        <rule name="Remove WWW prefix" >
          <match url="(.*)" ignoreCase="true" />
          <conditions trackAllCaptures="false">
            <add input="{HTTP_HOST}" pattern="^www\.mydomain\.com" />
          </conditions>
          <action type="Redirect" url="{MapProtocol:{HTTPS}}://mydomain.com/{R:1}" redirectType="Permanent" />
        </rule>
        <rule name="homepage" stopProcessing="true" >
          <match url="^wwwzone/homepage.aspx"/>
          <action type="Redirect" url="/"/>
        </rule>
      <rule name="homepageReal" stopProcessing="true" >
        <match url="^$"/>
        <action type="Rewrite" url="/somepath/homepage.aspx"/>
      </rule>
      </rules>
      <rewriteMaps>
        <rewriteMap name="MapProtocol">
          <add key="on" value="https"/>
          <add key="off" value="http"/>
        </rewriteMap>
      </rewriteMaps>
    </rewrite>