重定向在Codeigniter中的index.php页面中

时间:2012-01-06 04:20:21

标签: codeigniter redirect

我在codeigniter中开发一个网站。这是我的网址http://myserver.net/visio/UBwXo。 这里h ttp://myserver.net/visio/是我的base_url。

/visio/之后有一个变量。当/ visio /之后有任何值时,我想从数据库中获取相应的url到这个值。

这意味着在我的数据库中

UBwXo => “ * 任何网址 ***

jshom => “ * 任何网址 ***

所以当在/ visio /之后获取值时我想从数据库获取相应的url并将其重定向到该url而不使用htaccess。

我想在根文件夹的index.php页面中完成此重定向过程。

这可能吗?

http://myserver.net/visio/UBwXo的原始网址myserver.net/visio/index.php/admin/index/UBwXo

默认控制器为admin

2 个答案:

答案 0 :(得分:7)

首先,在controllers文件夹( application / controllers )中创建redirect.php文件,并将此代码添加到此文件中:

if (!defined('BASEPATH'))
    exit('No direct script access allowed');

class Redirect extends CI_Controller
{

    /**
     * Method to redirect from an alias to a full URL
     */
    public function index()
    {

    $alias = $this->uri->segment(1);

    $this->db->select('url');

    $query = $this->db->get_where('links', array('alias' => $alias), 1, 0);

    if ($query->num_rows() > 0)
    {
        foreach ($query->result() as $row)
        {
        $this->load->helper('url');

        redirect($row->url, 'refresh', 301);
        }
    }
    else
    {
        echo "Sorry, alias '$alias' not found";
    }
    }

}

然后在数据库中创建表。你的桌子必须是这样的:

CREATE TABLE IF NOT EXISTS `links` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `alias` varchar(6) CHARACTER SET utf8 DEFAULT NULL,
  `url` text CHARACTER SET utf8,
  PRIMARY KEY (`id`),
  UNIQUE KEY `alias` (`alias`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ;

之后,将默认控制器值设置为重定向类。 打开 application / config / routes.php 。找到$route['default_controller'],然后将redirect设置为此变量的值,如下所示:

$route['default_controller'] = "redirect";

然后享受生活;)

修改

我忘记在config/routes.php中提及重定向的URI路由:

$route[':any'] = "redirect/index/$1";

答案 1 :(得分:0)

此处您最好的资源是CodeIgniter指南,特别是Controllers上的页面。关于Remapping Function calls的部分应该正是您在这种情况下所需要的部分。

由于默认行为是在基本URL之后查找具有第一个段名称的控制器方法,我们需要更改它以将其作为参数传递给某个函数。您的控制器可能如下所示:

class Shortener extends CI_Controller {

     private function shorten( $token ){
         // Find the URL that belongs to the token and redirect
     }

     public function _remap( $method, $params = array() ) {

         // Catch other controller methods, pulled from the CodeIgniter docs
         if ( method_exists( $this, $method ) ) {
             return call_user_func_array( array( $this, $method ), $params );
         }

         $this->shorten( $method );

     }
}