我想加密codeigniter中的网址。
我的最终目标是加密域名后的所有内容。 example.com/controller/function/itemid 至 example.com/sdfsdfsff/sdafaergdfsd/dfesDEWrewF
我可以在我的控制器中使用ci的“加密”库来加密/解密itemid,但有没有其他方法可以在网址中包含所有内容?
答案 0 :(得分: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);
}
}