【问题标题】:Getting last part of URL into variable with Url Rewriter使用 Url Rewriter 将 URL 的最后一部分转换为变量
【发布时间】:2010-12-03 19:10:28
【问题描述】:

我正在使用 Url Rewriter 在我的 Web 应用程序中创建用户友好的 URL,并设置了以下规则

<rewrite url="/(?!Default.aspx).+" to="/letterchain.aspx?ppc=$1"/>

如何替换 $1 使其成为 URL 的最后一部分?

这样下面

www.mywebapp.com/hello

会变成

/letterchain.aspx?ppc=hello

我已阅读文档,但找不到任何内容。

【问题讨论】:

    标签: url-rewriting urlrewriter.net urlvariables


    【解决方案1】:

    组的to 部分中的$1 指的是定义的第一个捕获组(例如括号中的部分)。

    您真正想要注入 $1 的部分是 .+ ,它不在捕获组中。

    我不确定,但我认为由于 (?!)“如果后缀不存在则匹配”查询,这不算作编号的捕获组 $1,所以这应该工作:

    <rewrite url="/(?!Default.aspx)(.+)" to="/letterchain.aspx?ppc=$1"/>
    

    如果没有,那么只需尝试将第二个捕获组插入到您的 to 字符串中:

    <rewrite url="/(?!Default.aspx)(.+)" to="/letterchain.aspx?ppc=$2"/>
    

    【讨论】:

    • 嗯,它在 Expresso(一个正则表达式开发工具)中工作。当您说 ppc="" 时,您的意思是重写工作并将您发送到页面吗?我刚刚想到我们已经创建了一个无限循环,因为 /letterchain.aspx?ppc= 匹配左侧部分。尝试添加 processing="stop" 作为属性。
    • 此外,如果您尝试将无扩展名 url 与 url 重写匹配,您需要在 iis7 上或为 iis6 设置通配符映射 (professionalaspnet.com/archive/2007/07/27/…)
    • 抱歉您的建议确实有效。当我看到您的示例时,我认为它与我的示例相同 - 我没有发现 .+ 周围的额外括号非常感谢您
    【解决方案2】:

    请注意,如果您正在为 IIS 7+ 进行开发,http://www.iis.net/download/urlrewrite/ 是来自 Microsoft 的一个模块,它执行更快的重写,占用更少。

    顺便说一句,你的正则表达式有个小问题,需要对点字符进行转义,即“/(?!Default.aspx)(.+)”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-27
      • 1970-01-01
      • 1970-01-01
      • 2019-07-23
      • 2013-07-13
      • 1970-01-01
      相关资源
      最近更新 更多