asp.net - 如何创建匹配多个 URL 的重写规则

标签 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 条件或向其添加多个 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 页面。

最佳答案

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

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

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

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

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

关于asp.net - 如何创建匹配多个 URL 的重写规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31095017/

相关文章:

IIS 托管和 SSL 的 WCF web.config 文件设置

c# - asp.net webforms 在代码隐藏中处理 404 notfound 错误?

c# - 用户在 asp.net MVC 3 url 中输入正斜杠 "/"

c# - 如何将接口(interface)的具体实现传递到接受泛型接口(interface)的 MVC 局部 View 中?

c# - 在 ASP.NET 2010 WebForms 中显示 .raw 图像

jsf - 在JSF应用程序中从URL删除/faces/

c# - 获取智能感知以显示自定义服务器控件的标记中的属性

asp.net - 我可以在 URL 中使用逗号吗?

c# - 如何使用查询字符串中的数据重写 Azure 图像 URL

ASP.NET 托管环境/shadowCopyBinAssemblies