2012-02-07 3 views
1

Я хочу зашифровать URL-адрес в кодеигнитре.Шифрование URL-кода в кодеигниторе

Моя конечная цель - зашифровать все после домена. example.com/controller/function/itemid в example.com/sdfsdfsff/sdafaergdfsd/dfesDEWrewF

я могу использовать Конфигурационную «шифровать» библиотеку в моем контроллере для encyrpt/расшифровать Itemid, но есть ли другой способ делать encyrtpt все в url?

+1

Вы могли бы хотеть смотреть на крючки. http://codeigniter.com/user_guide/general/hooks.html –

ответ

0

Альтернативой использованию крючков может быть просто переопределение классов CI_URI и CI_Config. При загрузке сегментов URI в массив сегментов он должен расшифровать их (возможно, в методе _set_uri_string()). Затем он должен зашифровать сегменты в переопределенном классе CI_Config (в частности, метод _uri_string()).

Вот (непроверенные) образец для вашего удовольствия:

<?php 
// application/core/MY_URI.php 
class MY_URI extends CI_URI { 
    function _set_uri_string($str) 
    { 
     parent::_set_uri_string($str); 
     $CI =& get_instance(); 
     $CI->load->library('encrypt'); 
     $parts = explode('/', $this->uri_string); 
     foreach ($parts as &$part) 
     { 
      if ($part) $part = $CI->encrypt->decode($part); 
     } 
     $this->uri_string = implode('/', $parts); 
    } 
} 

// application/core/MY_Config.php 
class MY_Config extends CI_Config { 
    protected function _uri_string($uri) 
    { 
     if (!is_array($uri)) 
     { 
      $uri = explode('/', $uri); 
     } 

     $CI =& get_instance(); 
     $CI->load->library('encrypt'); 
     foreach ($uri as &$part) 
     { 
      if ($part) $part = $CI->encrypt->encode($part); 
     } 

     return parent::_uri_string($uri); 
    } 
}