1

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

关于我的问题。<system.webserver>我的 Web.config 的//部分中有以下内容<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>

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

这意味着超级性感的 URL 没有重复,也不会导致相互重写,所以大家都笑了。

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

必须写出两条规则以确保将一条重定向到另一条,并将另一条重写为一条,这有点麻烦。是否可以编写一个规则来实现上述两个功能?

4

1 回答 1

2

优雅是一个主观术语,我想有几种方法会更好,例如使用重写可扩展性和实现花哨的映射逻辑,但到目前为止,我推荐的方法是只使用 2 条规则,一条用于重定向,一条用于重写,然后利用重写地图,这将使管理它们变得更具可读性(但仍然很痛苦),例如下面你现在只需要维护地图而不再需要处理规则:

<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>
于 2010-05-19T21:25:05.150 回答