在插件中添加重写规则:使用插件文件夹中的.htaccess或使用WordPress函数

时间:2013-01-31 作者:leticia

我需要在我的插件中添加一个重写规则,并将其与我的代码一起分发。如果我把规则放进去,一切都很好。htaccess在WordPress根文件夹中,但我需要使用我的规则分发插件。

我试着放一个。htaccess在插件文件夹中,并尝试使用add_rewrite_rule 功能,但也不起作用。

这里是。在WordPress根文件夹中正常工作但在我的插件文件夹中不工作的htaccess代码:

<IfModule mod_rewrite.c>

RewriteEngine On
RewriteRule my-plugin/pages/tp(.*)\\.php$ wp-content/plugins/my-plugin/pages/request.php?pid=$1

</IfModule>
我在插件中尝试了以下代码,但都不起作用:

add_filter( \'query_vars\', \'add_query_vars\' );
function add_query_vars( $query_vars )
{
    $query_vars[] = \'pid\';
    return $query_vars;
}
add_action( \'init\', \'add_init\' );
function add_init()
{
    $plugin_url = \'the-path-to-my-plugin-folder\';
    add_rewrite_rule(\'my-plugin/pages/tp(.*)\\.php\'
                  , $plugin_url . \'pages/request.php?pid=$matches[1]\',\'top\');

    global $wp_rewrite;
    $wp_rewrite->flush_rewrite_rules(); // I know this should be called only one time, but I put it here just to keep simple the sample code
}
但我总是得到一个错误,那就是找不到URL。我做错了什么?我怎样才能做我需要的事?我寻找类似的问题,但没有一个能解决我的问题。

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

注意:WordPress重写API与Apache重写模块不同。WP重写API不会将请求重定向到另一个URL,它用于解析当前URL并填充query_vars 大堆

问题在于你的第二个参数add_rewrite_rule 函数调用。它必须从index.php? 然后应该有你的论点,比如pid, 例如:

"index.php?pid=$matches[1]...."
所以你的add_init 函数应如下所示:

add_action( \'init\', \'wpse8170_add_init\' );
function wpse8170_add_init()
{
    add_rewrite_rule(\'my-plugin/pages/tp(.*)\\.php\', \'index.php?pid=$matches[1]\', \'top\');
}
不要忘记通过访问刷新重写规则Settings »;Permalinks

进一步阅读:

结束

相关推荐

HtAccess中的WordPress分区取消FrontPage权限

我在web服务器的public\\u html目录中运行WordPress(即我帐户上的主域指向此目录)。此文件夹下有其他网站的子目录(例如“subdomain.com”网站的/subdomain)。子目录中的一些网站是使用FrontPage编辑的。我发现了。根目录中的htaccess文件在配置为WP时,会弄乱FrontPage权限,使其无法使用FrontPage(FrontPage从不提示进行身份验证,并抛出404错误)。从网络搜索中,我发现其他人也遇到了这个问题(例如。https://my.blueh