如何创建匹配多个URL的重写规则

时间:2015-06-28 00:37:40

标签: asp.net url-rewriting web-config

我现在每种语言都有这个,但正如你所看到的那样,它们都会重写到同一页面:

    <rule name="help en">
      <match url="^help?/?$"/>
      <action type="Rewrite" url="help.aspx"/>
    </rule>
    <rule name="help sp">
      <match url="^ayuda?/?$"/>
      <action type="Rewrite" url="help.aspx"/>
    </rule>

或更复杂的参数化重写,如:

<rule name="news category overview_de">
  <match url="^artikelen/([a-zA-Z0-9-+']+)?/?$" />
  <action type="Rewrite" url="newsoverview.aspx?category={R:1}" />
</rule>

<rule name="news category overview_en">
  <match url="^articles/([a-zA-Z0-9-+']+)?/?$" />
  <action type="Rewrite" url="newsoverview.aspx?category={R:1}" />
</rule>  

这占用了很多空间,所以有没有办法把它写得更短?

我查看了这篇文章:How to add multiple URL rewrite rules in a web.config,但这并没有缩短。 有没有办法可以重复match url条件或添加多个网址?

更新1

我试过了:

<rule name="news overview">
  <match url="^(artikelen|articles)?/?$" />
  <action type="Rewrite" url="newsoverview.aspx" />
</rule>
<rule name="news category overview">
  <match url="^(artikelen|articles)/([a-zA-Z0-9-+']+)?/?$" />
  <action type="Rewrite" url="newsoverview.aspx?category={R:1}" />
</rule>

但是现在这甚至会将请求重定向到我的主页到newsoverview.aspx页面。

1 个答案:

答案 0 :(得分:2)

您在此处使用正则表达式,因此您可以使用:

^(help|ayuda|hilfe|aide)?/?$

所以你只需将语言相关的单词放入OR结构中:

^(articles|artikelen|artikel)/([a-zA-Z0-9-+']+)?/?$ 

只要参数化部分始终相同,这就应该有效。