[英]How to get info or actual of short URL service without redirect on original
[英]how to redirect a short url to original url in codeigniter
我想使用CI為我的項目制作一個網址縮短器。 我可以縮短長網址,但問題是,經過短時間后,我無法將其重定向為原始網址。
這是我的控制器代碼。
<?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";
}
}
?>
這是我的模型代碼
<?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';
}
}
?>
這是我的看法。
<h1>Short your url with CI</h1>
<div id="urldiv">
<a href=""><?php echo base_url() . $shorturl;?></a>
</div>
我在路線文件中做了一些更改。
$route['default_controller'] = "shorten";
$route['404_override'] = 'shorten/get_long_url';
$route['error_404'] = 'shorten/error_404';
雅虎! 終於我明白了。 所需的型號變更
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';
}
控制器需要變更
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.