WordPress插件中的URL重写问题

时间:2018-11-14 作者:user1660218

在我的a WordPress插件中,我很难让重写规则按照我想要的方式工作。

我添加了重写规则:

add_rewrite_rule(\'some_url\',\'some_redirected_url\', \'top\');
规则已写入。htaccess和规则按预期工作;检查$\\u服务器变量时,我得到以下结果:

$\\u服务器[\'REDIRECT\\u URL\']=“some\\u redirected\\u URL”

$\\u服务器[\'REQUEST\\u URI\']=“some\\u url”

但是,WordPress正在分析$\\u服务器[\'REQUEST\\u URI\']中的请求参数,因此不会分析重定向的请求。

换句话说,如果我去http://myserver/some_url 即使重定向有效,请求也不起作用。如果我直接去http://myserver/some_redirected_url 一切正常。

如何让WordPress解析重定向的URL?

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

如果您想要一个从不同URL加载post类型存档的重写规则,最简单的方法是通过内部重写,它不会插入到中。htaccess。内部重写将URL映射到查询参数,并且必须导致主查询成功:

add_rewrite_rule(
    \'some_url/?$\',
    \'index.php?post_type=yourcpt\',
    \'top\'
);

SO网友:user1660218

我找到了解决问题的方法,但一点也不优雅
在Wordpress解析请求之前,我通过直接设置$\\u服务器[\'request\\u URI\'],确保解析的请求与重定向的请求相同
然后在Wordpress完成解析后,我将$\\u服务器[\'REQUEST\\u URI\']重置回其原始值<一点也不漂亮,但至少黑客的工作方式符合我的要求。如果有人能告诉我做这件事的“正确方法”,我仍然对答案感兴趣。。。

下面是我的“黑客”

    add_filter(\'do_parse_request\', \'myplugin_doParseRequestFilter\', 10, 3);
    add_filter(\'request\', \'myplugin_doRequestFilter\', 10, 1 );



    function myplugin_doParseRequestFilter($some_bool, $request, $vars){
            //called before Wordpress starts the parsing...     
            if(isset($_SERVER[\'REDIRECT_URL\'])){
                if(strpos($_SERVER[\'REDIRECT_URL\'],\'/_my_page_prefix_/\')){
                    global $resetUrl;
                    $resetUrl=$_SERVER[\'REQUEST_URI\'];   
                    $_SERVER[\'REQUEST_URI\']=$_SERVER[\'REDIRECT_URL\'];    
                }    
            } 
            return $request;    
        }


    function myplugin_doRequestFilter($vars){
        //called when Wordpress is finished parsing... 
        if(isset($_SERVER[\'REDIRECT_URL\'])){
            if(strpos($_SERVER[\'REDIRECT_URL\'],\'/_my_page_prefix_/\')){   
                global $resetUrl;
                $_SERVER[\'REQUEST_URI\']=$resetUrl;             
            }    
        }
        return $vars;    
    }

结束

相关推荐