假设我有一个接受的社交网络:
短网址使用昵称:例如 - > www.mynetwork.com/john.doe 256位AES哈希:例如 - > www.mynetwork.com/23fdgfdjhdbfuyviofhedfbncxgersbzc34 ...
我想将它们路由到像'Profile'这样的单个控制器,其中:
短网址版本的功能如下:fetch($ nick)其中, 我将缺口哈希到aes,然后进行重定向以调用函数:view($ hash)
视图函数实际上具有显示该用户的配置文件的逻辑。
这确保无论我选择访问个人资料的网址是什么情况,无论是短网址还是哈希,我总是会被重定向到哈希网址调用......
我该怎么做?我认为这与路线有关,但我对如何处理它有点迷失......
缩短,访问: www.mynetwork.com/john.doe重定向到:www.mynetwork.com/23fdgfdjhdbfuyviofhedfbncxgersbzc34并显示该用户的个人资料
当然,直接访问www.mynetwork.com/23fdgfdjhdbfuyviofhedfbncxgersbzc34只会显示用户的个人资料
答案 0 :(得分:1)
如果您不愿意为不同的功能使用不同的URL,请执行以下操作:
www.mynetwork.com/nick/john.doe
www.mynetwork.com/hash/23fdgfdjhdbfuyviofhedfbncxgersbzc34
然后,你必须编写一个可以在缺口和散列之间进行区分的函数。在您的示例中,CodeIgniter会同时看到这一点,缺口和哈希:
www.mynetwork.com/{someArg}
你可以这样做:
www.mynetwork.com/view/nickOrHash
控制器:
class View extends CI_Controller
{
public function index($arg)
{
if (strlen($arg) < length_of_hash)
{
viewByNick($arg);
}
else
{
viewByHash($arg);
}
}
public function viewByNick($arg)
{
}
public function viewByHash($arg)
{
}
}
您还必须编辑CodeIgniter的URI路由,以便将nickOrHash
作为参数发送到index
,并且不会在nickOrHash
下搜索名为view controller
的函数(http://codeigniter.com/user_guide/general/routing.html)
在上面的代码中,将length_of_hash
替换为256位AES散列始终具有的长度
编辑:
确定参数是否为缺口或散列的另一种更可靠的方法可能是:
viewByHash($arg)
$arg
,如果存在具有新散列的用户,则再次检查数据库。如果存在,则使用计算的哈希值调用viewByHash(newHash)
。error 404
路由:
$route['view/(:any)'] = "view/index/$1";
如果用户请求网址mynetwork.com/view/arg
,则codeIgniter会在index()
中调用view controller
方法,将用户请求网址的最后一部分作为参数传递。
如果您想直接通过哈希检查,可以将其更改为:
$route['view/(:any)'] = "view/viewByHash/$1";
如果上述功能失败,则按用户名等检查