URL重写双追加问号

时间:2015-08-18 16:55:08

标签: c# asp.net regex url-rewriting

我有两条规则:

<rewrite url="^/de(/.+)(\?(.+))?$" to="$1?lang=de&amp;$3" />
<rewrite url="^/terms-and-conditions(\?(.+))?$" to="~/Pages/Terms.aspx?$2" processing="stop"/>

这应该是:

/terms-and-conditions
/de/terms-and-conditions

所有指向同一页面(Terms.aspx

这适用于所有测试用例,但以/de开头且具有查询字符串的URL除外。

/de/terms-and-conditions?x=y

提供查询字符串:

?x=y?lang=de&

如何修复此规则以获得&符号而不是第二个问号?

我可以通过将其分为两个规则来实现它:

<rewrite url="^/de(/.+)\?(.*)$" to="$1?lang=de&amp;$2" />
<rewrite url="^/de(/.+)$" to="$1?lang=de" />

但是为了简单起见,我在一条规则中喜欢这个!

1 个答案:

答案 0 :(得分:1)

您可以使用以下正则表达式:

^\/de(\/[^?]+)(\?(.+))?$

这句话是因为(\/[^?]+)(匹配/,然后是/以外的1个或多个字符)限制正则表达式只匹配/ s和(\?(.+))?之间的1个子部分{1}}匹配可选(由于最终?)文字?,然后匹配换行符以外的任意数量的字符。