htaccess重写规则在WordPress网站中导致404

时间:2014-10-29 10:11:46

标签: wordpress apache .htaccess mod-rewrite

我正在使用带有自定义页面模板的WordPress页面,然后我发送GET数据。我想将http://example.com/blue/green重写为http://example.com/blue/?id=green

RewriteEngine On
RewriteBase /

RewriteRule ^blue/green/?$ /blue/?id=green [NC,L]

考虑到下一步,我想制作绿色通用,如下所示:

RewriteEngine On
RewriteBase /

RewriteRule ^blue/([a-zA-Z0-9]+)/?$ /blue/?id=$1 [NC,L]

这些规则放在.htaccess文件中的WordPress规则之上,但不断产生404错误。

但是,如果我使用301重定向,它确实有效:

RewriteEngine On
RewriteBase /

RewriteRule ^blue/([a-zA-Z0-9]+)/?$ /blue/?id=$1 [R=301,NC,L]

或者,如果我输入绝对URL,它也会起作用:

RewriteEngine On
RewriteBase /

RewriteRule ^blue/([a-zA-Z0-9]+)/?$ http://example.com/blue/?id=$1 [NC,L]

但是,如果可能的话,这两个都会导致URL变更我不想要的。那么前两个htaccess语句出了什么问题?

1 个答案:

答案 0 :(得分:0)

最后想出来了。必须直接使用WordPress重写函数而不是htaccess。这是我在主题functions.php中的代码

// Add query tags
add_filter( 'query_vars', 'stats_rewrite_tag' );
function stats_rewrite_tag( $query_vars )
{
    $query_vars[] = 'id';
    return $query_vars;
}

// Add to htaccess
function stats_rewrite_rule() {
    global $wp_rewrite;
    add_rewrite_rule(
        'blue(/([^/]+))?/?',
        'index.php?pagename=blue&slug=$matches[2]',
        'top'
    );
    $wp_rewrite->flush_rules( false );
}
add_action('init', 'stats_rewrite_rule');