Перенаправление на странице index.php в Codeigniter - PullRequest
3 голосов
/ 06 января 2012

Я занимаюсь разработкой сайта в codeigniter. Это мой URL http://myserver.net/visio/UBwXo. Здесь h ttp://myserver.net/visio/ - это мой base_url.

После /visio/ здесь есть переменная. Если есть какое-либо значение после / visio /, тогда я хочу взять соответствующий URL из базы данных к этому значению.

Это означает, что в моей базе данных,

UBwXo => "* любой URL ***"

jshom => "* любой URL ***"

Таким образом, при получении значения после / visio / я хочу взять соответствующий URL из базы данных и перенаправить его на этот URL, не используя htaccess.

Я хочу выполнить этот процесс перенаправления на странице index.php корневой папки.

Возможно ли это?

Оригинальный URL для http://myserver.net/visio/UBwXo, как myserver.net/visio/index.php/admin/index/UBwXo

контроллер по умолчанию admin

Ответы [ 2 ]

7 голосов
/ 10 января 2012

Сначала создайте файл redirect.php в папке контроллеров ( application / controllers ) и добавьте этот код в этот файл:

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 / rout.php . Найдите $route['default_controller'], затем установите redirect в качестве значения этой переменной, например:

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

Тогда наслаждайся жизнью;)

EDIT:

Я забыл упомянуть URI-маршрутизацию в config/routes.php для перенаправления:

$route[':any'] = "redirect/index/$1";
0 голосов
/ 06 января 2012

Вашим лучшим ресурсом здесь будут руководства CodeIgniter, а именно страница Контроллеры . Раздел Переопределение вызовов функций должен быть именно тем, что вам нужно в этом случае.

Поскольку поведение по умолчанию заключается в поиске метода контроллера с именем первого сегмента после базового 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 );

     }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...