【问题标题】:How can I build a regex for a rewrite rule in PHP?如何在 PHP 中为重写规则构建正则表达式?
【发布时间】:2020-10-08 14:53:37
【问题描述】:

我目前正在尝试为 WordPress 中的 url 编写重写规则。原始 URL 如下所示:

http://localhost/download/d0RqYU8xek9JOXBsQmJrRGpldWF2QT09/?selected_files%5B0%5D=TURUWEdaWWNtS1ZOd2NSY0MybThCQT09&selected_files%5B1%5D=cWhFVEtlOENNM0VwNmlrUlBmOVF1UT09

/download/ 之后的第一个值是特定文件存储的唯一标识符。之后,我添加了一组文件。

在 WordPress 中,我现在想为此请求编写一个重写 URL,以便我可以在后端处理它。为此,我需要一个特定的正则表达式来识别请求并返回匹配项以构建我的重写 url:

public function filter_rewrite_rules_array( $rules ): array {
    $new_rules['download/([0-9][a-z][A-Z]+)/.......'] = admin_url( 'admin-ajax.php' ) . '?download=$matches[1]&selected_files=$matches[2]';
    return array_merge( $rules, $new_rules );
}

关键是我无法完成正则表达式......有人可以帮我解决这个问题吗?即使是第一场比赛也不起作用。

更新:

我期待这个 URL 的结果:

http://localhost/admin-ajax.php?download=d0RqYU8xek9JOXBsQmJrRGpldWF2QT09&selected_files%5B0%5D=TURUWEdaWWNtS1ZOd2NSY0MybThCQT09&selected_files%5B1%5D=cWhFVEtlOENNM0VwNmlrUlBmOVF1UT09

正如我刚才看到的 - 请求可以有多个文件 ID。所以不知道如何使用正则表达式完成此操作。这甚至可能吗?

【问题讨论】:

  • 请也添加您的预期结果。
  • @Mandy8055 完成!
  • 这部分是静态的:http://localhost/admin-ajax.php?download= 其余部分是动态的。
  • @Mandy8055 是的!非常感谢。请将其发布为答案,以便我给您打勾:)

标签: php regex url-rewriting


【解决方案1】:

你可以试试:

.*?\/download\/(.*?)\/\?(.*)

上述正则表达式的解释:

.*? - Lazily 匹配 \download 之前的所有内容。

\/download\/ - 从字面上匹配 /download/

(.*?) - 表示匹配您需要的唯一 id 的捕获组,即匹配 /? lazily 之前的任何内容。

(.*) - 表示与 url 其余部分匹配的第二个捕获组。

替换部分:由于部分http://localhost/admin-ajax.php?download=是静态的;您可以将它与捕获的组一起使用,即http://localhost/admin-ajax.php?download=$1&$2


你可以在here.找到上述正则表达式的demo

【讨论】:

    猜你喜欢
    • 2016-02-10
    • 2021-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-01
    相关资源
    最近更新 更多