【问题标题】:How to create rewrite rule that matches multiple URLs如何创建匹配多个 URL 的重写规则
【发布时间】:2015-09-14 16:43:15
【问题描述】:

我现在每种语言都有这个,但是你可以看到它们都重写到同一个页面:

    <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 页面。

【问题讨论】:

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


    【解决方案1】:

    你在这里使用的是正则表达式,所以你可以使用:

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

    所以您只需将依赖于语言的单词放入 OR 构造中:

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

    只要参数化部分始终相同,这应该可以工作。

    【讨论】:

    • 啊,天呐!这将如何与更复杂的参数化重写一起工作?我添加了一个示例。
    • 嗨,看看我的更新。所有主页请求现在也使用我的新重写规则重定向......我错过了什么?
    • 问号表示前面的表达式有一个或没有,所以 (foo)?匹配 foo 但也没有。在您的原始比赛中,help? 问号仅适用于 p,括号适用于整个事物,使其成为可选的。我不认为你想要那个问号。
    • 啊,我以为我必须将可选部分放在问号之间:)
    猜你喜欢
    • 2014-06-30
    • 2011-04-07
    • 2020-01-05
    • 1970-01-01
    • 1970-01-01
    • 2017-04-16
    • 2011-01-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多