【问题标题】:Extract specific URL parts with regex and rewrite使用正则表达式提取特定的 URL 部分并重写
【发布时间】:2020-08-17 00:22:44
【问题描述】:

我正在尝试重写一些 url 并通过一个正则表达式通过路径名提取它们的参数值。 url 可以有多种变体,s-term、pg-n、sort-order 等可以是任意顺序。除了总是在网站 url 之后的类别。

示例 1: www.test.com/freebies/s-term/pg-2/

  • 提取 $1=freebies , $2=term, $3=2
  • 那么我可以重写到 www.test.com?category=$1&s=$2&page=$3

示例 2: www.test.com/freebies/pg-2/

  • 提取 $1=freebies , $2='', $3=2

  • 那么我可以重写到 www.test.com?category=$1&s=$2&page=$3

所有可能的组合

http://localhost:8888/pg-2/
http://localhost:8888/s-term/
http://localhost:8888/s-term/pg-2/
http://localhost:8888/s-term/pg-2/
http://localhost:8888/freebies/
http://localhost:8888/freebies/pg-2/
http://localhost:8888/freebies/s-term/
http://localhost:8888/freebies/s-term/pg-2/

在任何一种情况下,我都想获得第 1 组中的类别,第 2 组中的搜索词,第 3 组中的分页,第 4 组中的排序顺序


这是我到目前为止所尝试的,但是在替换区域中,您可以看到它每次找到匹配项时都会替换,我想用新的 URL 替换整个 url 并包含组数据。

https://regex101.com/r/4v1uf5/10

您认为通过 regex 或 .htaccess 重写可能是一个更好的计划吗?

谢谢!

【问题讨论】:

  • 您的问题含糊不清,无法以目前的形式回答。目前尚不清楚这些变化是如何以一般模式解释的。你举了两个例子,但从那里没有一般的模式可以被挤出。因此,要么您需要提供更多(全部?)可能的组合及其解释。或者,更有用的是,您需要自己表达这种一般模式。
  • 这就是你要找的东西freebies\/(s-term|pg-2)\/{0,}(pg-\d){0,}
  • @arkascha 我尽量简化这个问题。所以我想要实现的是重写这个 url 来使用查询参数。第一个路径始终是类别,但接下来的路径是可选的并且顺序不同。您可以有一个 url taht 显示类别并应用搜索词。然后,您可以拥有一个应用了搜索词和分页的类别页面。或者您可以简单地拥有一个仅包含类别和分页的页面。主要结构是这个 www.test.com/category/search/paging 。我将添加更多示例
  • @atoms 几乎!问题是它将组内容按 url 路径顺序放置,但我希望组 2 始终仅是搜索项。如果它不存在,那么它是空的。以此类推。
  • freebies\/(s-term)\/{0,}(pg-\d){0,}|freebies\/pg-2\/(s-term){0,}怎么样

标签: regex .htaccess url-rewriting formula pcre


【解决方案1】:

最终通过使用多个组依次提取值来解决它:

(?:(freebies)\/|pg-([^\/]+)\/|s-([^\/]+)\/)\/?(?:s-([^\/]+)\/|pg-([^\/]+)\/)?(?:pg-([^\/]+)\/)?


演示在这里: https://regex101.com/r/4v1uf5/26

【讨论】:

    猜你喜欢
    • 2013-08-25
    • 2018-11-04
    • 2016-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多