URL重写WordPress页面查询字符串

时间:2014-11-27 03:13:43

标签: php wordpress .htaccess mod-rewrite url-rewriting

我有一个WordPress网站,其中包含一个字符串自定义页面比较。

现在需要:

mysite.com/phones/compare/?between=samsung-galaxy-note-3-vs-nokia-lumia-730

它必须是这样的:

mysite.com/phones/compare/samsung-galaxy-note-3-vs-nokia-lumia-730

我已尝试在我的网站上添加代码.htaccess对我没用,并转到WordPress 404页面:

RewriteRule ^phones/compare/(.+?)/?$ phones/compare/?between=$1 [NC,L]

当用户访问mysite.com/phones/compare/?between=URL时,我也需要重定向到新的搜索引擎友好URL。

2 个答案:

答案 0 :(得分:6)

您正在获取404页面,因为WordPress内部并不了解如何处理该URL。因此,您正在寻找的解决方案将是.htaccess(用于重定向)和重写规则的组合,以便WordPress可以处理URL

将以下内容添加到functions.php

add_action( 'init', 'init_custom_rewrite' );

function init_custom_rewrite() {

        add_rewrite_rule(        
            '^phones/compare/([^/]*)/?',        
            'index.php?page_id=XXX&between=$matches[1]',        
            'top' );
}

XXX替换为比较页面的page_id,通过重新保存永久链接结构来刷新重写规则。现在为.htaccess添加一个规则以进行重定向,这应该可行。

修改

将以下代码添加到functions.php以访问页面中的between query var

add_filter('query_vars', 'my_query_vars', 10, 1);

function my_query_vars($vars) {
    $vars[] = 'between'; 
    return $vars;
}

然后,您可以使用get_query_var("between")

访问它

答案 1 :(得分:1)

您需要在wordpress规则之前添加规则。您拥有的那个应该在任何wordpress规则之前工作,但是为了使用查询字符串重定向请求,您需要这样:

RewriteCond %{THE_REQUEST} \ /+phones/compare/\?between=([^&\ ]+)
RewriteRule ^ /phones/compare/%1? [L,R]

同样,您拥有的规则加上上面的规则需要在您的所有wordpress规则之前。