首先,我想为这个荒唐的头衔道歉。我不是试图通过使用“双向”这个词听起来很酷或很聪明,我只是真的想不出用另一种方式来描述它。的承诺。
关于我的问题。我在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。
这意味着超级性感的网址没有重复,也不会导致相互重写,所以全面微笑。
我的问题是:这可以更优雅地完成吗?
要写出两条规则以确保一条规则重定向到另一条规则,另一条规则被重写为另一条规则,这有点麻烦。是否有可能编写一个能够实现上述两个功能的规则?
答案 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>