URL重写双附加问号

本文关键字:重写 URL | 更新日期: 2023-09-27 18:08:38

我有两条规则:

<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" />

但为了简单起见,我希望在一个规则中!

URL重写双附加问号

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

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

这是因为('/[^?]+)(匹配/,然后匹配/以外的1个或多个字符)限制了regex在/ s之间只匹配1个子部分,而('?(.+))?匹配可选(由于最终的?)一个文字?,然后是除换行符以外的任何数量的字符。