ADD_REWRITE_RULE:$匹配未被捕获的值替换的变量

时间:2011-08-29 作者:a_fan

我想访问插件文件(当<a> ,而不显示文件的实际路径。我正在使用以下重写规则:

add_rewrite_rule( \'continue/([0-9]+)/?$\', \'wp-content/plugins/my-plugin/continue.php?where=$matches[1]\', \'top\' );
请求被重定向到continue.php 但我总是$_GET[\'where\']=$matches[1] 而不是$_GET[\'where\']=123 内部继续。php。它应该被一些数字所取代。

我想要类似的东西this

Update

我试过了Monkeyman Rewrite Analyzer 但我的规则没有体现在里面。那为什么我会被重定向到正确的页面?

e、 g.对于continue/2 它具有以下输出:

(.+?)(/[0-9]+)?/?$ pagename: continue page: /2

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

不管刷新与否,重写规则都不会起作用。

WordPress中有两种重写规则。那些具有重写URL的URL以索引开始。php和那些没有。

所有WordPress内部重写规则必须以索引开头。php。它不能重定向到其他任何地方,因为它已经被重定向到索引。WordPress函数处理规则集时的php文件。So非索引。php规则必须进入。htaccess直接访问,以便将它们重定向到索引以外的任何位置。php。

以索引开头的那些。php将在WordPress内部处理,在这种情况下,$matches[1]语法将是正确的。

那些不是以索引开头的。php将被写入。htaccess文件作为直接重写规则。在这种情况下,$匹配[1]语法没有任何意义。

如果你看看你的眼睛。htaccess文件使用规则后,您会发现:

RewriteRule continue/([0-9]+)/?$ wp-content/plugins/my-plugin/continue.php?where=$matches[1]
这显然行不通。

相反,请尝试将您的代码转换为:

add_rewrite_rule( \'continue/([0-9]+)/?$\', \'wp-content/plugins/my-plugin/continue.php?where=$1\');
记下1美元的替代品?当转换为普通重写规则时,这将正常工作。

结束