Wordpress自定义mod_rewrite - 不工作

时间:2016-02-09 21:33:38

标签: wordpress apache .htaccess mod-rewrite

晚上好,

我觉得我一直在用一块砖墙撞我的头一段时间我现在求助于你。

我有一个Wordpress支持的网站,我在其上创建了一些使用URL参数的自定义页面模板,以使它们正常工作。

目前我的网页处理正常:mydomain.com/clubs/betting/?c=arsenal

我试图做的是让它看起来更漂亮,如下所示:mydomain.com/clubs/betting/arsenal /

我认为这将是一个10分钟的工作,但是一个半小时后,我仍然没有进一步。我的mod_rewrite看起来像这样:

  # BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^clubs/betting/([A-Za-z0-9-]+)/?$ clubs/betting/?c=$1 [NC,L]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

我哪里错了?

2 个答案:

答案 0 :(得分:0)

你可以使用重写api来调用你的php文件,而不是创建一个页面模板。这将是最干净的方式。

add_action('init', 'anew_rewrite_rule');
function anew_rewrite_rule(){
   //note matching betting/something 
   add_rewrite_rule('^betting\\/[a-z]','index.php?is_betting_page=1','top');  
}

add_action('query_vars','controller_set_query_var');
function controller_set_query_var($vars) {
    array_push($vars, 'is_betting_page'); // ref url redirected to in add rewrite rule

    return $vars;
}


//we'll call it a template but point to your controller
add_filter('template_include', 'include_controller');
function include_controller($template){


    // see above 2 functions..
    if(get_query_var('is_betting_page')){
        //path to your template file -- update this!
        $new_template = get_stylesheet_directory().'/yourtemplatefile.php';
        if(file_exists($new_template)){
            $template = $new_template;
        } 
    }    

    return $template;    

}

注意:插入此代码后需要进入设置并保存永久链接,这会刷新重写规则。

这样wordpress就不会尝试使用自己的重写机制来解析网址...

您可以使用$ _SERVER变量获取uri。

当然,如果你在项目中足够早,你可以创建一个名为投注的自定义帖子类型并将其设置为基本网址,然后阿森纳将是一个自定义帖子类型等。然后你可以使用获得标题来运行任何你要。

答案 1 :(得分:0)

感谢大卫指出我正确的方向......我终于设法使用Wordpress Rewrite API解决了这个问题。

最后,我在functions.php文件中使用了以下代码:

function custom_rewrite_rule(){
   //note matching betting/something 
   add_rewrite_rule('^clubs/betting/([^/]+)/?','index.php?page_id=160&club_name=$matches[1]','top');  
  add_rewrite_tag('%club_name%','([^/]*)');
}

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

这允许我处理url重写并仍然将url参数传递给我的页面,以便我可以在其上显示正确的内容。

然后我可以使用以下方式访问页面模板中的参数:

$wp_query->query_vars['club_name'];

感谢您指出我正确的方向...我想我会发布我最终使用的代码以防其他人试图这样做。