我目前正在尝试为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。 所以不知道如何用正则表达式来完成这个任务。 这有可能吗?
您可以尝试:
.*?\/download\/(.*?)\/\?(.*)
上述正则表达式的说明:
.*?
-懒洋洋地匹配\download
之前的所有内容。
\/download\/
-字面上与/download/
匹配。
(.*?)
-表示与您所需的唯一id匹配的捕获组,即懒惰地匹配/?
之前的任何内容。
(.*)
-表示与URL的其余部分匹配的第二个捕获组。
替换部分:因为http://localhost/admin-ajax.php?download=
部分是静态的; 您可以将它与捕获的组一起使用,即http://localhost/admin-ajax.php?download=$1&$2
。
您可以在这里找到上述正则表达式的演示。