【问题标题】:URL Rewrite - optional parameter?URL 重写 - 可选参数?
【发布时间】:2011-03-22 19:59:45
【问题描述】:

我想要一个正则表达式字符串来反映一个可选参数,在本例中是一个地理状态。

我可以通过两条规则来实现这一点:

<rewrite url="~/(.+)-(.+)/(.+).aspx" to="~/Default.aspx?city=$1&amp;state=$2&amp;term=$3&amp;x=$4"/>
<rewrite url="~/(.+)/(.+).aspx" to="~/Default.aspx?city=$1&amp;state=NONE&amp;term=$2&amp;x=$4"/>

通过对 /Los+Angeles/cars.aspx 的查询: 地理 - 城市:洛杉矶 地理 - 状态:无

查询 /Los+Angeles-CA/cars.aspx: 地理 - 城市:洛杉矶 地理 - 州:CA

我很好奇是否有办法在一个重写语句中做到这一点。

谢谢。

【问题讨论】:

    标签: regex web-config url-rewriting optional-parameters


    【解决方案1】:

    已经有一段时间没有搞乱配置中的重写 url,但我已经习惯了正则表达式。这对你有用吗?

    <rewrite url="~/([^-]+)(?:-(.+))?/(.+).aspx" to="~/Default.aspx?city=$1&amp;state=$2&amp;term=$3&amp;x=$4"/>
    

    状态不会说无,但实际上应该是空白的。

    【讨论】:

    • 这可能行得通,我会试一试。 “无”仅用于显示目的。
    • 效果很好,谢谢。现在,我想要一个可选的斜杠,而不是可选的破折号,例如: /Los+Angeles/CA/cars.aspx 。谢谢。
    【解决方案2】:

    您愿意将空字符串而不是 NONE 传递给 state 参数吗?如果是这样,您的第一条规则可以这样重写:

    ~/(.+)-?(.+)/(.+).aspx
    

    ...您的第二个可能会被删除。

    【讨论】:

    • 这个Regex,把第二个参数的最后一个字母去掉,把第一个和第二个结合起来,输出最后一个字母作为第二个参数。
    猜你喜欢
    • 1970-01-01
    • 2017-05-28
    • 2011-10-22
    • 2016-12-19
    • 2013-01-27
    • 2010-12-13
    • 2018-05-20
    • 1970-01-01
    • 2011-12-15
    相关资源
    最近更新 更多