【问题标题】:RegEx URL ReWrite match all in expression unless term exists正则表达式 URL 重写匹配所有表达式,除非存在术语
【发布时间】:2010-03-11 07:11:27
【问题描述】:

我目前正在重写一个 URL,但是我的 RegEx 表达式正在捕获一个我想被忽略的目录。

重写规则是

^people/([A-Za-z0-9\-\_]+)/?$

...捕获所有匹配的内容。但是,我想排除一个目录 People_Search,例如...

/people/John_Smith

...会转发,但是

/people/People_Search

...不应该是这样的。

这是我要查找的唯一术语,因此如果它存在于字符串中的任何位置,我想忽略它。

有什么想法吗?

【问题讨论】:

  • 那个正则表达式匹配。所以这是与另一个规则或其他东西的冲突。你的 .htaccess 文件是什么样子的?

标签: regex url-rewriting


【解决方案1】:

Regex 有一个叫做“非捕获否定前瞻断言”的东西,它基本上说“不匹配以下内容”。它看起来像这样:

^people/(?!People_Search)([A-Za-z0-9\-\_]+)/?$ 

您是否可以使用它取决于您使用的重写引擎,以及其中包含的正则表达式支持级别。我希望大多数常见的重写器都支持这一点。

仅供参考:还有否定的后向断言 (?

教程:http://www.regular-expressions.info/lookaround.html

【讨论】:

    【解决方案2】:
    ^people/(?!People_Search)([A-Za-z0-9\-\_]+)/?$
    

    people/ 之后防止匹配People_Search 的负前瞻

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多