为什么我的ADD_REWRITE_RULE重写规则不能按预期工作?

时间:2018-03-28 作者:Rockfire

我有一个post类型“destinations”,它应该在没有自定义post类型slug的情况下工作,但它应该是分层的。因此可以存在这样的页面:/madagascar/grouptrip/information我想创建一个重写规则,以匹配主要父母(马达加斯加和乌干达),并匹配所有子页面的层次结构。所以我看了一下用于页面的重写规则:

(.?.+?)?(:/([0-9]+))?/?$

在前面加上我的主要父母:

add_rewrite_rule(\'(madagascar|uganda)/(.?.+?)?(:/([0-9]+))?/?$\', \'index.php?destination=$matches[1]/$matches[2]&page=$matches[4]\', \'top\');

这适用于我的示例url/madagascar/grouptrip/information 但是如果我在末尾添加页码/madagascar/grouptrip/information/2 它不起作用了。对于我复制的页面,regex匹配了完全相同的结构。只有当我从正则表达式中删除冒号时,重写规则才起作用,我不明白为什么?

So to sum it up:

(.?.+?)?(:/([0-9]+))?/?$

正在为以下结构工作:

/pagename/subpage/2

但是:

(madagascar|uganda)/(.?.+?)?(:/([0-9]+))?/?$

不适用于以下结构:

/madagascar/subpage/2

以及:

(madagascar|uganda)/(.?.+?)?(/([0-9]+))?/?$

正在工作。为什么复制的regex不起作用?

1 个回复
SO网友:Levi Dulstein

所以冒号的问题是它没有特殊的含义,所以您的正则表达式需要匹配:/ 字面上讲,这适用于具有以下结构的字符串:

/madagascar/subpage:/2

您将获得一场全场比赛和4组比赛:

array 
(
    [0] => \'madagascar/subpage:/2\'
    [1] => \'madagascar\'
    [2] => \'subpage\'
    [3] => \':/2\'
    [4] => \'2\'
)
但是,由于冒号不在测试字符串中,因此只能得到一个完整匹配和两组(仅部分(madagascar|uganda)(.?.+?)? 检测阳性)

array
(
    [0] => \'madagascar/subpage/2\'
    [1] => \'madagascar\'
    [2] => \'subpage/2\'
)

结束

相关推荐