Wordpress add_rewrite_rule给出了404

时间:2014-12-15 15:47:43

标签: wordpress .htaccess url-rewriting rewrite permalinks

我想更改特定自定义帖子类型的永久链接结构.i.e

http://test.com/brand/calvin-klien?mtype=tab2
                     ^this is dynamic    

http://test.com/brand/calvin-klien/mtype/tab2
                      ^this is dynamic

这是我试过的一段代码。

注册add_rewrite_tag

function custom_rewrite_tag() {
        add_rewrite_tag('%mtype%', '([a-z0-9\-]+)');
    }
    add_action('init', 'custom_rewrite_tag', 10, 0);

add_action('init', 'wpse50530_journal_archive_rewrite', 10, 0);

代码1

function wpse50530_journal_archive_rewrite(){

   add_rewrite_rule('brand/([a-z0-9\-]+)/([a-z0-9\-]+)/$','index.php?name=$matches[1]/?mtype=$matches[2]','top');
}

代码2

add_action('generate_rewrite_rules', 'work_list');
function work_list($wp_rewrite) {
    $newrules = array();
    $newrules['brand/([a-z0-9\-]+)/([a-z0-9\-]+)/$'] = 'index.php?name=$matches[1]&mtype=$matches[2]';
    $wp_rewrite->rules = $newrules + $wp_rewrite->rules;

我在codesflushed permalinks上方尝试过,但仍然是404。我不知道为什么它会在htaccess中创建 $ matches ,因为htacces不知道什么是 $ matches

此外,我已尝试monkeyman-rewrite-analyzer plugin显示我的永久链接的正确匹配结果,但仍显示404。请参阅Code1& amp;的附加截图。代码2

Code1![][1] Code2

3 个答案:

答案 0 :(得分:3)

以下代码应该有帮助

add_action( 'init', 'so_27487849' );

function so_27487849() {

    add_rewrite_rule(
        '^brand/([^/]*)/mtype/([^/]*)/?',
        'index.php?name=$matches[1]&mtype=$matches[2]',
        'top');

}

刷新你的永久链接,它应该工作。

答案 1 :(得分:0)

我将继续使用Anand的代码进行进一步的更改。它在name=$matches[1]上重定向,我需要保持与我点击的相同网址,为此必须包含自定义帖子类型名称。

add_action( 'init', 'so_27487849' );
function so_27487849() {
    add_rewrite_rule('^brand/([^/]*)/([^/]*)/?','index.php?brand=$matches[1]&mtype=$matches[2]','top');
                                                             ^--this
}

我得到了漂亮的网址...... Yaaay !!! 但是 URL不包含query string(i.e: mtype=tab1),其余的代码也没用,所以我们可以通过get_query_var('mtype')来实现这一点,并获得相同的值在$_REQUEST['mtype']工作,我的代码就像一个魅力。

我也停用了monkeyman pluggin

答案 2 :(得分:0)

在调用函数add_rewrite之前或之后..插入这段代码status_header(200);