【问题标题】:URL Rewriting in IIS 7IIS 7 中的 URL 重写
【发布时间】:2012-10-29 21:39:04
【问题描述】:

我将现有规则作为 xml 将任何请求重写或重定向到特定 url 到其域。它不会让任何出站请求离开域。

我只想向一个网址(比如 abc.com)添加一个例外。如何为特定请求添加例外?

(请不要提供 global.asax 之类的东西,因为 IIS 不能与 ASP.NET 应用程序一起使用,而是与其他一些应用程序一起使用)。

当前规则:

<rewrite>
    <rules>
      <rule name="topcontent">
           <match-url=".*">
                <action type="rewrite" url="mysite.com/{R:0}"/>
           </match-url>
       </rule>
    </rules>
</rewrite>

如果有任何入站请求,它会将 URL 重写为 mysite.com。我需要添加一个例外说abc.com/......怎么做?

【问题讨论】:

  • 您是真的将请求重写到其他域,即使用 IIS 作为反向代理(使用 ARR 重写 URL),还是要重定向请求?

标签: iis url-rewriting iis-7.5


【解决方案1】:

topcontent 规则之上创建另一个规则:

<rule name="special">
    <match-url="abc.com">
        <action type="rewrite" url="mysite.com/specialPage.htm"/>
    </match-url>
</rule>

这里有一个类似的问题:IIS URL rewrite exception

【讨论】:

    【解决方案2】:

    你可以使用下面的代码:

    <rule name="special" enabled="true">
      <match url=".*" />
      <conditions logicalGrouping="MatchAll" >
        <add input="{HTTP_HOST}" pattern="^(www\.)?abc\.com$" negate="true" />
      </conditions>
      <action type="Redirect" url="http://mysite.com/{R:0}"/>
    </rule>
    

    已经在规则中添加了一个条件,所以如果它不满足,那么动作就会被执行(negate="true"

    它会检查http://{HTTP_HOST}/url,如果它不匹配 abc.comwww.abc.com 这是例外,那么它会去行动。

    我也认为你可以在这里使用Redirect 而不是Rewrite

    【讨论】:

    • 假设我的域是 abc.com,传出域是 xyz.com。当前的 'topcontent' 规则将更改 url 并且不允许转到外部域。你能解释一下这个 {R:0} 和 {C:0} 是什么,都用于吗?以及 的 url 的正则表达式是如何构建的?谢谢。
    • 对于反向引用的 {C:0} 和 {R:0},请关注 Using Back-references in Rewrite Rules。在 中,.*(其中“.”表示任何字符,“*”表示 0 次或多次重复)将过滤 any URI 中最后一个斜杠后的 URL。作为正则表达式的简单指南,请关注Simple RegEx Tutorial
    【解决方案3】:

    进入 IIS 管理器 > [您的站点] > 网址重写。

    在这条匹配 abc.com 之前添加一条新规则并勾选“停止处理后续规则”。

    【讨论】:

    • 你能用xml显示我吗?因为我对正则表达式和url重写一无所知。
    猜你喜欢
    • 2013-07-01
    • 2012-12-26
    • 1970-01-01
    • 2014-05-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-09
    • 2011-08-18
    相关资源
    最近更新 更多