Rewrite rule never matching

时间:2016-09-19 作者:Guille B

我需要为我的网站添加一些重写规则。我需要链接此友好URL:

www.example.com/site-tool-calendar

www.example.com/site-tool?tool=calendar

/site-tool 已经是WordPress内部的永久链接,并且正在运行

我在我的functions.php

function custom_rewrite( $wp_rewrite ) {
    $feed_rules = array(
        \'^site-tools-(^/.]+)/$\'  =>  \'site-tools/?tool=\' . $wp_rewrite->preg_index(1),
    );
    $wp_rewrite->rules = $feed_rules + $wp_rewrite->rules;
}

add_filter( \'generate_rewrite_rules\', \'custom_rewrite\' );
在此之前functions.php 我将param“tool”添加到查询变量中:

function wpd_query_vars( $query_vars ){
    $query_vars[] = \'tool\';
    return $query_vars;
}
add_filter(\'query_vars\', \'wpd_query_vars\');
我刷新了admin Permalink页面中的规则,并尝试测试URL,但尽管我的规则被添加到$wp_rewrite->wp_rewrite_rules() 列表,它从不匹配。

它始终与以下通用规则相匹配:

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

我调试了它,并检查了我的规则是否出现在规则列表的开头,但从未执行过。

如果我做错了什么,有人能帮我再检查一遍吗?我尝试了很多替代方案,但都把我带到了同样的情况:规则出现了,但从未执行过。

1 个回复
最合适的回答,由SO网友:Ahmed Fouad 整理而成

请试试这个。

首先使用此函数添加所需的重写规则

add_action( \'init\', \'rewrite_site_tools_page\' );
function rewrite_site_tools_page() {

  add_rewrite_rule(
    \'^site-tools-([^/]+)$\',
    \'index.php?pagename=site-tools&tool=$matches[1]\',
    \'top\');

}
假设页面名称为site tools。

现在将该工具添加为query var

add_filter(\'query_vars\', \'wpd_query_vars\');
function wpd_query_vars( $query_vars ){
    $query_vars[] = \'tool\';
    return $query_vars;
}
保存永久链接。

现在如果您访问hxxp://yourdomain.com/site-tools-calculator/它应该可以工作(计算器可以是其他任何东西)

如果要调试它,可以通过以下函数转储查询变量“tool”:

add_action(\'template_redirect\', \'test_my_queryvar\', 999 );
function test_my_queryvar() {
    die( var_dump( get_query_var( \'tool\' ) ) );
}

相关推荐

将重写规则直接添加到.htaccess文件

我想添加一个简单的重写规则RewriteRule ^apply\\/? https://docs.google.com/forms/d/e/1FAIpQLSf5IrOhg0E_NAGZnOvMuaXhU80sio8bukaWVBkb87eEOa9kTw/viewform [L] 我的。htaccess文件如下# BEGIN WordPress # The directives (lines) between "BEGIN WordPress" and "EN