【问题标题】:Regular expression that matches on optional single querystring parameter匹配可选单个查询字符串参数的正则表达式
【发布时间】:2015-11-29 10:25:23
【问题描述】:

这个 IIS 重写规则:

<rule name="music search state">
  <match url="^music/state/([a-zA-Z-+']+)?$"/>
  <action type="Rewrite" url="search.aspx?stateurl={R:1}&amp;t=2" appendQueryString="true"/>
</rule>

匹配的网址:
www.example.com/music/state/north-dakota

但不在网址上:
www.example.com/music/state/north-dakota?country=usa

我也试过了:

^music/state/([a-zA-Z-+']+)?^music/state/([a-zA-Z-+']+)

但是这些都不适用于两个 URL...我需要在此表达式中进行哪些更改以使其在两个 URL 上都匹配?

更新

我尝试扩展表达式的最后一部分,但是这 2 个表达式在 IIS 中引发了 Configuration file is not well-formed XML 错误:

  1. ([a-zA-Z-+'?\&amp;=]+)
  2. ([a-zA-Z-+'?&amp;amp;=]+)

并且此表达式与 URL ([a-zA-Z-+'?&amp;amp;=]+) 不匹配

【问题讨论】:

  • 这个 XML 文件是为什么系统编写的?您应该将该标签添加到问题中。
  • 您的意思是您需要对?country=usa 部分的支持吗?似乎您只需要在您的正则表达式中添加?= - ^music/state/([a-zA-Z-+'=?]+)?$
  • @Kamehameha 但这意味着 countryurl 值将成为 stateurl 参数值的一部分,对吗?那不是我想要的。我也应该能够添加更多参数,例如www.example.com/music/state/north-dakota?country=usa&amp;sort=az
  • 您可能需要删除 $ 或使用与 ?country=usa 部分匹配的部分将其扩展。 ^music/state/([a-zA-Z+-']+)?(?:\?[&amp;a-zA-Z+=-]*)?$
  • @sln 谢谢,但我测试了你的并得到了Configuration file is not well-formed XML,我已经用我运行的一些测试更新了我的帖子。

标签: regex iis rewrite


【解决方案1】:

在正则表达式^music/state/([a-zA-Z-+']+)?$ 部分[a-zA-Z-+'] 负责music/state/ 之后可以找到的所有字符。 像这样的东西:^music/state/([a-zA-Z-+'?&amp;=]+)?$

顺便说一句,您可以使用在线解释器检查您的正则表达式,例如 http://regexr.com/

【讨论】:

  • 谢谢!我最终得到了这个(转义&符号):music/state/([a-zA-Z-+'?&amp;amp;=]+)?$
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多