在根网站上为特定URL添加URL重写规则

时间:2018-04-13 15:48:25

标签: iis url-rewriting

是否可以在我的网站名称之后根据匹配的URL应用URL重写?所以说我在http://foo:8080上有一条规则,可以让我转到http://foo:8080/,然后重写为http://too。有没有办法说,如果我访问http://foo:8080/bar,它会将我带到http://too/bar,但在foo网站上有规则,而下面没有任何应用程序?

这将使一个站点上的多个规则能够根据我首先导航到的位置进行重新路由,而不是为每个重写规则设置多个应用程序。

我希望这是有道理的,如果没有,但你认为你有答案请告诉我,我会尽量更清楚。

由于

2 个答案:

答案 0 :(得分:1)

我认为您需要使用具有以下条件的规则。 URL Rewrite的文档列出了您的条件可用的变量:https://docs.microsoft.com/en-us/iis/extensions/url-rewrite-module/url-rewrite-module-configuration-reference

...
<rewrite>
    <rules>
        <rule name="Foo Bar Too testing" stopProcessing="true">
            <match url="(.*)" />
            <action type="Rewrite" url="http://too/{C:1}" />
            <conditions>
                <add input="{PATH_INFO}" pattern="/app/(.*)" />
            </conditions>
        </rule>
    </rules>
</rewrite>
...

上述规则(在foo上)仅适用于以/ app /开头的路径,重写的URL路径不包含/app前缀。您可以修改此操作以使用{C:0}(完整路径),其中包含重写URL中的/app前缀。

答案 1 :(得分:0)

感谢@MisterSmith指出我正确的方向,我发现答案如下,这也允许http或https。我的配置现在如下所示:

 <rewrite>
        <rules>
            <rule name="Rule" stopProcessing="true">
                <match url="^bar/(.*)" />
                <action type="Rewrite" url="{C:1}://too:8080/bar/{R:1}" />
                <conditions>
                    <add input="{CACHE_URL}" pattern="^(https?)://" />
                </conditions>
            </rule>
        </rules>
    </rewrite>

规则设置在网站“foo”上,现在当我转到http://foo/bar/blahblahblah时,我收到http://too:8080/bar/blahblahblah

的回复