首页 > 解决方案 > Wordpress add_rewrite_rule 返回 404 状态但产生一个页面

问题描述

我正在为 Wordpress 开发一个插件,它使用自定义永久链接。

add_rewrite_rule()这样使用:
add_rewrite_rule('^collection/sku/([^/]+)/?$', 'index.php?pagename=single_item&sku=$matches[1]', 'top');

当我转到/collection/sku/123显示正常的 url 时,但是我在检查器中注意到它返回 404 状态。我以前从未见过这种情况,我有点困惑如何获得 404 但仍然有一个页面似乎可以毫无问题地显示。

我使用 Facebook 调试器得到了同样的结果。它说有一个 404 响应代码,但它仍然会抓取所有信息。

我确实flush_rewrite_rules()在初始化过程结束时调用。

标签: wordpresshttp-status-code-404response

解决方案


我遇到了同样的问题,看了很多后我找到了一个解决方案,也许不是正确的,但它可以工作,现在返回 200 状态码而不是 404。

在为我添加的页面返回正确模板的函数中:

status_header(200);

整个例子:

add_filter('template_include', 'include_template');
    public function include_template( $template )
    {
        $page = get_query_var('pagename');

        if ( $page == 'participantes')
        {
          status_header(200);
          return trailingslashit( dirname( __FILE__ ) ) . 'page-participantes.php';
        }

        return $template;
    }

推荐阅读