我在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
答案 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 );
}
}