IIS7.5中的双向URL重写/重定向

时间:2010-05-19 09:57:05

标签: asp.net iis-7 url-rewriting iis-7.5

首先,我想为这个荒唐的头衔道歉。我不是试图通过使用“双向”这个词听起来很酷或很聪明,我只是真的想不出用另一种方式来描述它。的承诺。

关于我的问题。我在Web.config的<system.webserver> / <rewrite> / <rules>部分中有以下内容。

<!-- Who We Are -->
<rule name="1A">
    <match url="^whoweare\.aspx$" />
    <action type="Redirect" url="who-we-are" redirectType="Permanent" />
</rule>
<rule name="1B">
    <match url="^who-we-are$" />
    <action type="Rewrite" url="whoweare.aspx" />
</rule>

<!-- What We Do -->
<rule name="2A">
    <match url="^whatwedo\.aspx$" />
    <action type="Redirect" url="what-we-do" redirectType="Permanent" />
</rule>
<rule name="2B">
    <match url="^what-we-do$" />
    <action type="Rewrite" url="whatwedo.aspx" />
</rule>

现在这非常有效。实际上,如果您访问网址http://example.com/whoweare.aspx(该网页的实际网址),您将被重定向到网址http://example.com/who-we-are虚拟网址 URL),如果您访问虚拟URL,您将被重写为实际的URL。

这意味着超级性感的网址没有重复,也不会导致相互重写,所以全面微笑。

我的问题是:这可以更优雅地完成吗?

要写出两条规则以确保一条规则重定向到另一条规则,另一条规则被重写为另一条规则,这有点麻烦。是否有可能编写一个能够实现上述两个功能的规则?

1 个答案:

答案 0 :(得分:2)

优雅是一个主观的术语,我想有两种方法会更好,例如使用Rewrite扩展性和实现花哨的映射逻辑,但到目前为止我推荐的方式只使用2个规则,一个用于重定向还有一个用于Rewrite,只需利用Rewrite Maps就可以让它更具可读性(但仍然很痛苦),例如下面你现在只需要维护地图就不用再处理规则了:

<system.webServer>
    <rewrite>
        <rules>
            <rule name="Rewrite From Pretty URL" stopProcessing="true">
                <match url=".*" />
                <conditions>
                    <add input="{URLsToRewrite:{REQUEST_URI}}" pattern="(.+)" />
                </conditions>
                <action type="Rewrite" url="{C:1}" appendQueryString="false" />
            </rule>
            <rule name="Redirect To Pretty URL" stopProcessing="true">
                <match url=".*" />
                <conditions>
                    <add input="{URLsToRedirect:{REQUEST_URI}}" pattern="(.+)" />
                </conditions>
                <action type="Redirect" url="{C:1}" appendQueryString="false" />
            </rule>
        </rules>
        <rewriteMaps>
            <rewriteMap name="URLsToRewrite">
                <add key="/who-we-are" value="/whoweare.aspx" />
                <add key="/what-we-do" value="/whatwedo.aspx" />
            </rewriteMap>
            <rewriteMap name="URLsToRedirect">
                <add key="/whoweare.aspx" value="/who-we-are" />
                <add key="/whatwedo.aspx" value="/what-we-do" />
            </rewriteMap>
        </rewriteMaps>
    </rewrite>
</system.webServer>