简体   繁体   English

如何将短网址重定向到Codeigniter中的原始网址

[英]how to redirect a short url to original url in codeigniter

I want to make a url shortener for my project using CI. 我想使用CI为我的项目制作一个网址缩短器。 I can short long url but problem is that after short this i can't redirect it original url. 我可以缩短长网址,但问题是,经过短时间后,我无法将其重定向为原始网址。

Here is my controller code. 这是我的控制器代码。

<?php
if (!defined('BASEPATH')) {exit ('No direct script access allowed');}

class Shorten extends CI_Controller{

    public function __construct(){
        parent::__construct();
        $this->load->model('shorten_mdl');
    }

    public function index(){
        $this->load->view('home');
    }

    public function create(){
        $short_url = "";
        $url = prep_url($this->input->post('url'));
        $link_length = $this->config->item('link_length');
        $existing_alias = $this->shorten_mdl->alias_from_url($url);
        $this->form_validation->set_rules('url','URL','trim|required|xss_clean');

        if ($this->form_validation->run()== FALSE) {
            $this->index();}
        else {
            if ($existing_alias == "") {
                $alias = random_string('alnum',$link_length);
                while($query = $this->shorten_mdl->does_alias_exist($alias)){
                    $alias = random_string('alnum',$link_length);}
                    $this->shorten_mdl->save_new_alias($url,$alias);
                    $short_url = $alias;
            }
            else {
                $short_url = $existing_alias;
            }

            $this->get_short_url($short_url);
    }

    public function get_long_url(){
        $alias = $this->uri->segment(1);
        redirect($this->shorten_mdl->get_long_url($alias));
    }

    public function error_404(){
    echo "Nothing! Fool";
    }
}

?>

Here is my model code 这是我的模型代码

<?php
if (!defined('BASEPATH')) {echo "No direct script access allowed";}

class shorten_mdl extends CI_Model{

    public function __construct(){
        parent::__construct();
    }

    public function save_new_alias($url, $alias){
        $data = array('alias'=>$alias,'url'=>$url,'created'=>date('Y-m-d H:i:s'));
        $this->db->insert('links',$data);
    }

    public function alias_from_url($url){
        $alias = "";
        $this->db->select('alias');
        $query = $this->db->get_where('links', array('url'=>$url),1,0);

        if ($query->num_rows() > 0) {
            foreach ($query->result() as $row){
                $alias = $row->alias;
            }
        }
        return $alias;
    }

    public function does_alias_exist($alias){
        $this->db->select('id');
        $query = $this->db->get_where('links', array('alias'=>$alias), 1,0);

        if ($query->num_rows()>0){
            return TRUE;
        }

        else {
            return FALSE;
        }
    }

    public function get_long_url($alias){
        $alias="";
        $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) {
                return $row->url;
            }
        }
return '/error_404';
    }
}
?>

here is my view. 这是我的看法。

<h1>Short your url with CI</h1>

<div id="urldiv">
    <a href=""><?php echo base_url() . $shorturl;?></a>
</div>

I have made some change in my routes file. 我在路线文件中做了一些更改。

    $route['default_controller'] = "shorten";
    $route['404_override'] = 'shorten/get_long_url';
    $route['error_404'] = 'shorten/error_404';

Yahoo!!! 雅虎! Finally i got it. 终于我明白了。 required change in model 所需的型号变更

public function get_long_url($alias){

    $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) {
            return $row->url;
        }
    }
 return '/error_404';
}

required change in controller 控制器需要变更

   public function get_long_url($alias=""){

      $alias = $this->uri->segment(1);
      redirect($this->shorten_mdl->get_long_url($alias));
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM