Regex WordPress-使用多个参数重写规则

Regex WordPress-使用多个参数重写规则,regex,wordpress,url-rewriting,Regex,Wordpress,Url Rewriting,我正在设置一个WordPress页面,它通常会接受两个querystring参数。我们的主机更喜欢使用重写规则而不是查询字符串,所以我不得不采用这种方法 所以我通常会这样做: domain.com/animal page.php?animal=dog&color=brown 我必须这样做: domain.com/animal page/animal/dog/color/brown 我遇到的问题是第二个querystring参数是可选的 这样的重写规则不起作用: add_rewrite_rule(

我正在设置一个WordPress页面,它通常会接受两个querystring参数。我们的主机更喜欢使用重写规则而不是查询字符串,所以我不得不采用这种方法

所以我通常会这样做:

domain.com/animal page.php?animal=dog&color=brown

我必须这样做:

domain.com/animal page/animal/dog/color/brown

我遇到的问题是第二个querystring参数是可选的

这样的重写规则不起作用:

add_rewrite_rule(
    '([\-\w+]*)/animal/([\w+]*)/color/([\w+]*)', 
    'index.php?pagename=$matches[1]&animal=$matches[2]&color=$matches[3]',
    'top'
);  
add_rewrite_rule(
    '([\-\w+]*)/animal/([\w+]*)/color/([\w+]*)', 
    'index.php?pagename=$matches[1]&animal=$matches[2]&color=$matches[3]',
    'top'
);  
…因为如果URL中没有颜色参数(这是可能的),则该正则表达式将失败

我还尝试在正则表达式中选择查询参数(颜色)和值(棕色),但仍然不起作用:

add_rewrite_rule( 
        '([\-\w+]*)/animal/([\w+]*)(\/color\/?)([\w+]*)',
         'index.php?pagename=$matches[1]animal=$matches[2]&$matches[3]=$matches[4]', 
        'top'
)
我的问题是:有没有办法使第二个查询参数成为可选的?如果URL中没有“color”参数,我希望页面能够做出适当的反应


谢谢,

在这种情况下,您需要制定两条单独的规则:

add_rewrite_rule(
    '([\-\w+]*)/animal/([\w+]*)/?$', 
    'index.php?pagename=$matches[1]&animal=$matches[2]',
    'top'
);