add_rewrite_rule confusion

时间:2017-10-16 作者:Michae Pavlos Michael

我的函数中有这个函数。本地主机构建的php:-

function custom_rewrite() {
    add_rewrite_rule(\'.*\', \'http://example.com/\', \'top\');
}

add_action(\'init\', \'custom_rewrite\');
据我所知,这应该将任何页面重定向到示例。com。但它不起作用。页面正常加载,无重定向。添加规则后,我尝试刷新,但没有乐趣。

显然,我并不想像这样重定向所有页面,但我正在尝试在根据需要微调之前进行基本的重写。但我甚至无法跨越第一个障碍!

我在网上看了无数的教程,但都没法让它们发挥作用。是否有使用add\\u rewrite\\u规则的先决条件?如果没有,有人知道为什么这行不通吗?是因为我在本地主机环境中吗?

如有任何建议,将不胜感激!

编辑

我听从了杰克的建议,将重写规则改为:-

add_rewrite_rule(\'.*\', \'index.php?page_id=81\', \'top\');
但我仍然没有任何运气。我还尝试更改。*将所有内容捕获到实际的现有页面名,如下所示:-

add_rewrite_rule(\'^testpage/?\', \'index.php?page_id=81\', \'top\');
仍然没有重定向。

ID为81的页面与“testpage”一样存在。我被难住了。重写规则应该在本地主机构建上工作吗?任何人都能提供进一步的启示吗?

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

扩展我的评论:

重写API用于重写URL,而不是重定向。因此URL不会更改。你只是告诉WordPress/testpage/ 应加载page_id 81, 但URL将保持不变/testpage/.

无论如何,我尝试了以下方法(其中501是安装中存在的ID),它运行良好,加载了该页面的内容和模板:

function wpse_283104_rewrite() {
    add_rewrite_rule(\'^testpage/?\', \'index.php?page_id=501\', \'top\');
}
add_action( \'init\', \'wpse_283104_rewrite\' );
确保你flushing rewrite rules 尽管如此。除非你这样做,否则它不会起作用。

如果你只是想重定向,那么.htaccess or a plugin 可能是最好的选择。

如果您确实想对重定向使用重写规则,那么您需要做的是重写URL以设置自定义查询变量,然后在template_redirect 钩住,并执行重定向。

首先,我们将创建一个名为wpse_283104_redirect. A query var is a query string that WordPress recognises. We need to tell WordPress to see?wpse\\U 283104\\U重定向=1in a rewrite so that we can check it later. This is done by filtering the查询变量数组:

function wpse_283104_query_vars( $vars ) {
    $vars[] = \'wpse_283104_redirect\';

    return $vars;
}
add_filter( \'query_vars\', \'wpse_283104_query_vars\' );
接下来是重写规则:

function wpse_283104_rewrite() {
    add_rewrite_rule( \'^testpage/?\', \'index.php?wpse_283104_redirect=1\', \'top\' );
}
add_action( \'init\', \'wpse_283104_rewrite\' );
现在/testpage/ 将加载主页,但自从我们注册wpse_283104_redirect 我们可以看看我们是否在/testpage/ (或无论重写的URL是什么)使用[get_query_var()][2].

所以在template_redirect 钩子我们将执行此检查并重定向:

function wpse_283104_redirect() {
    if ( get_query_var( \'wpse_283104_redirect\' ) == \'1\' ) {
        wp_redirect( \'http://example.com\' );
        exit;
    }
}
add_action( \'template_redirect\', \'wpse_283104_redirect\' );

结束

相关推荐