【问题标题】:Using Intelligencia UrlRewriter regex .asp pages to a holding page使用 Intelligencia UrlRewriter 正则表达式 .asp 页面到持有页面
【发布时间】:2009-08-01 12:03:05
【问题描述】:

查看我网站的统计数据时,我意识到绝大多数流量来自第三方链接,这些链接指向几年前不存在的经典 ASP 页面。

我认为在 web.config 中添加一堆 urlMappings 不是一个好主意,所以我添加了 Intelligencia UrlRewrite 并尝试添加一条规则,如下所示:

  <rewriter>
    <redirect url="^/(.*).asp$" to="~/pagenotfound.aspx?page=$1" />
  </rewriter>

该规则有效,但它会选择任何以 .asp = 结尾的 url,例如 /pagenotfound.aspx?page=someurl.asp。

哎呀:)

我对正则表达式不是很了解,我怎样才能让它忽略跟在问号字符后面的“.asp”?

【问题讨论】:

    标签: regex web-config urlrewriter


    【解决方案1】:

    试试这个:

      <rewriter>
        <redirect url="^/([^?]*)\.asp(\?.*)?$" to="~/pagenotfound.aspx?page=$1" />
      </rewriter>
    

    这应该使它忽略任何以 .asp 结尾但包含 ?在它之前。 [^?] 表示“任何不是 ? 的字符”而不是 * 表示“任何字符”。

    编辑:添加了额外的模式以允许查询字符串.asp 扩展名之后,但不能在它们之前。

    【讨论】:

    • 戴夫,感谢您的回复。虽然这有效,但这意味着它不再使用查询字符串获取 .asp 页面,这有点违背我的目的 - 我需要检测任何合法的 .asp url 并重定向,而不是捕获恰好在查询中的 .asp细绳。谢谢
    • Heya Richard - 你应该能够扩展 url 正则表达式以在 .asp 扩展名之后添加查询字符串的潜力 - 我已经编辑了上面的示例,我相信 /i> 会起作用(虽然不是 100% 确定我是否掌握了它的语法)。
    • 我还添加了应该在第一个句点前面的反斜杠(对于 .asp) - 否则,它会将其解释为匹配任何字符的常规正则表达式句点(而不是文字句点),这将导致它不正确地匹配 /test.asp?asp 之类的内容
    • 不错的答案,戴夫。我看到的唯一限制是它不会将捕获查询字符串作为重写的一部分传递。将正则表达式更改为 ^/([^?]*)\.asp\??(.*)?$ 并将结果更改为 ?page=$1&$2 将允许这样做。
    • 不幸的是,这会导致其他问题,克里斯 - 您建议的正则表达式将匹配 /test.aspx(由于 ? 的可选性独立于 .* 的可选性),这会破坏核心初始问题的要求。相反,您实际需要的是: ^/([^?]*)\.asp(\?(.*))?$ 然后使用 ?page=$1&$3 的结果 - 但是,因为 Richard似乎要离开 .asp,而重写目标是“pagenotfound.aspx”,我猜查询字符串的实际内容对他来说并不是那么重要 - 他只是希望所有 .asp url 重写.
    【解决方案2】:
    <rewrite url="^~/browse/([^/.]+)\.aspx?$"
     to="~/browse-prints.aspx?dispCat=$1"/>
    
    <rewrite url="^~/browse/([^/.]+)\.aspx(\?.*)?$"
     to="~/browse-prints.aspx$2&amp;dispCat=$1"/>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-12
      • 1970-01-01
      • 2013-04-16
      • 1970-01-01
      • 1970-01-01
      • 2013-02-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多