【问题标题】:Wordpress add_rewrite_rule gives 404Wordpress add_rewrite_rule 给出 404
【发布时间】:2015-02-13 18:33:58
【问题描述】:

我想更改特定自定义帖子类型的永久链接结构。即

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 和 Code2 屏幕截图

【问题讨论】:

    标签: wordpress .htaccess url-rewriting rewrite permalinks


    【解决方案1】:

    下面的代码应该会有所帮助

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

    刷新您的永久链接,它应该可以工作。

    【讨论】:

    • 谢谢阿南德我做了一些改变,但你的回答对我来说是一个开端:)
    • 你能帮帮我吗=我需要 404 来输入错误的网址。正确的是 brand/calvin-klein/tab1/watches1/ 错误的是 brand/calvin-klein/tab12231231/watches1/ 但它仍然给我同样的错误而不是 404 页面
    • 404 发生在找不到页面或帖子时,tab12231231 是查询变量,因此您必须在 CPT 代码中处理它,检查它是否是有效的 mtype,如果它不会重定向到其他页面或显示错误消息。您可以手动引发 404,请参阅以下关于手动引发 404 的线程:wordpress.stackexchange.com/questions/91900/…。并感谢您纠正错字:)
    【解决方案2】:

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

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

    我得到了漂亮的 URL...耶! 但是 URL 不包含 query string(i.e: mtype=tab1) 并且我的其余代码是无用的,所以我们可以通过执行 get_query_var('mtype') 来实现这一点,我得到了与 $_REQUEST['mtype'] 相同的值我的代码就像一个魅力。

    我还停用了monkeyman pluggin

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-16
        • 2021-09-03
        • 2014-09-24
        相关资源
        最近更新 更多