URL重写 - 重定向到不同的端口并使用map更改URL

时间:2012-11-02 04:53:26

标签: url-rewriting iis-7.5

我想重写URL以重定向到不同的端口,基于HTTP_URL,同时保留其余的URL和查询字符串(如果指定)。 例如,
应将http://host/john/page.aspx重定向到http://host:1900/page.aspx, http://host/paul/anotherpage.aspx?queryhttp://host:1901/anotherpage.aspx?query
http://host/ringohttp://host:1902/
我为每个允许的端口添加了一堆规则,但它看起来效率不高或不易管理 我正在尝试使用地图(即约翰 - > 1900,保罗 - > 1901),但无法弄清楚如何组装所需的网址。
有什么建议吗?

1 个答案:

答案 0 :(得分:8)

需要一些小小的努力才能让它发挥作用,但回头看它的解决方案非常简单和优雅。

<rewrite>
    <rules>
        <clear />
        <rule name="Redirect known names to ports" stopProcessing="true">
            <match url=".*" />
            <conditions trackAllCaptures="true">
                <add input="{REQUEST_URI}" pattern="/(.*?)/(.*)" />
                <add input="{NameToPort:{C:1}}" pattern="(.+)" />
            </conditions>
            <action type="Redirect" url="http://{HTTP_HOST}:{C:3}/{C:2}" appendQueryString="false" redirectType="Permanent" />
        </rule>
    </rules>
    <rewriteMaps>
        <rewriteMap name="NameToPort">
            <add key="john" value="1900" />
            <add key="paul" value="1901" />
            <add key="ringo" value="1902" />
        </rewriteMap>
    </rewriteMaps>
</rewrite>

如果您正在寻找,请告诉我。