drupal重定向api

a20*_*a20 2 api redirect drupal http-status-code-301

如果登录用户尝试访问它,我想将"homebox/1"的请求重定向到"homebox/1/[uid]".我现在还不关心匿名用户.

这是我放入首页的代码 - homebox.tpl.php:

if(!is_numeric(arg(2))){
global $user;
if($user->uid){
    if(count($_GET) > 1){
        $get = array();
        foreach($_GET as $k=>$v){
            if($k != 'q')
                $get[] = $k.'='.$v;
        }
        $get2 = '?'.implode('&',$get);
    }
    header("HTTP/1.1 301 Moved Permanently");
    header('location:/homebox/1/'.$user->uid.$get2);
}else{
    //redirect to error page
}
}
Run Code Online (Sandbox Code Playgroud)

但是,*.tpl.php文件是否在请求后期处理?在那种情况下,我做得相当低效.

我知道路径重定向模块(http://drupal.org/project/path_redirect).我不想使用它,因为我想知道是否有任何用于重定向的Drupal API和/或在处理链开始时捕获和重定向请求的方法.

谢谢Arul

Jer*_*nch 8

您可能不得不使用hook_menu_alter(),但看起来homebox_menu()函数没有定义homebox /的条目

所以你只需编写自己的hook_menu实现,与homebox /匹配,并定义一个回调并将你的逻辑放在那里.

您可能希望使用drupal_goto()来进行重定向.

想要从模板中删除这样的逻辑做得很好.