URL IIS 8 中的重写规则未触发

URL Rewrite-rule in IIS 8 not triggering

我的 URL 重写有问题,我不知道我做错了什么,也许你能给我指出正确的方向。我们有一个内部网站,其模式如下:intranet.old-site.com。现在我们有了一个新域,我想将过时的链接转发到我们新内网的首页,如下所示:intranet.new-site.com.

我在 IIS 中安装了 URL 重写模块,在我看来,设置是正确的:

匹配URL

Request URL: matches pattern.
Using:       Wildcards
Pattern:     *intranet.old-site*
Ignore case: true

条件

none

服务器变量

none

动作

Action Type:                         Rewrite
Action Properties:                   Rewrite-URL: http://intranet.new-site.com/
Append query string:                 true
Log rewritten URL:                   false
Stop processing of subsequent rules: false

我也愿意接受任何可行的想法,所以如果 web.config 有规则,我也可以尝试。

更新 1:

网络配置现在看起来像这样:

<rewrite>
    <rules>
        <rule name="RewriteSG2DE" patternSyntax="ECMAScript" stopProcessing="true">
            <match url="(.*).sgbdd.saint-gobain(.*)" />
                <action type="Redirect" url="intranet.stark-deutschland.net" />
                <conditions logicalGrouping="MatchAny">
                    <add input="{HTTP_HOST}" pattern="(.*)sgbdd.saint-gobain(.*)" />
                    <add input="{HTTP_HOST}" pattern="intranet.sgbdd.saint-gobain.com" />
                </conditions>
        </rule>
    </rules>
</rewrite>

我想要将任何网站,基本上类似于 intranet.sgbdd.saint-gobain.com/start.asp?something_more" 的任何网站转发/重定向到 intranet.stark-deutschland.net/start.asp?something_more

例如:

intranet.sgbdd.saint-gobain.com/start.asp?something_more --> intranet.stark-deutschland.net/start.asp?something_more
somesite.intranet.saint-gobain.com/my/new/site --> somesite.intranet.stark-deutschland.net/my/new/site

我也按照提示添加了条件:

感谢您的输入

使用两个 URL 重写规则更容易处理这个问题。 如果你想重定向

intranet.sgbdd.saint-gobain.com/start.asp?something_more --> intranet.stark-deutschland.net/start.asp?something_more
somesite.intranet.saint-gobain.com/my/new/site --> somesite.intranet.stark-deutschland.net/my/new/site

那么规则可以这样

  <rule name="rule1" stopProcessing="true">
                <match url="(.*)" />
                <conditions trackAllCaptures="true">
                    <add input="{HTTP_HOST}" pattern="^(.*)saint-gobain.com$" />
                    <add input="{HTTP_HOST}" pattern="intranet.sgbdd.saint-gobain.com" negate="true" />
                </conditions>
                <action type="Redirect" url="http://{C:1}stark-deutschland.net/{R:1}" redirectType="Temporary" />
            </rule>
            <rule name="rule2" stopProcessing="true">
                <match url="(.*)" />
                <conditions>
                    <add input="{HTTP_HOST}" pattern="^intranet.sgbdd.saint-gobain.com$" />
                </conditions>
                <action type="Redirect" url="http://intranet.stark-deutschland.net/{R:1}" redirectType="Temporary" />
            </rule>

我试图将两个规则合并为一个规则,但是表达式有问题?!所以建议分成两条规则。

如果你的意思是

intranet.sgbdd.saint-gobain.com/start.asp?something_more --> intranet.stark-deutschland.net/start.asp?something_more
somesite.intranet.sgbdd.saint-gobain.com/my/new/site --> somesite.intranet.stark-deutschland.net/my/new/site

那么规则可以是这样的

<rule name="RewriteSG2DE" patternSyntax="ECMAScript" stopProcessing="true">
            <match url="(.*)" />
                <action type="Redirect" url="http://{C:1}stark-deutschland.net/{R:1}" redirectType="Temporary" />
                <conditions logicalGrouping="MatchAny">
                        <add input="{HTTP_HOST}" pattern="(.*)sgbdd.saint-gobain.com" />
                </conditions>
        </rule>