我正在尝试在codeigniter中创建我的应用程序的短链接,但在设计我的路线时我遇到了一个问题。问题是我需要一个路由,它将采用包含a-Z和数字的字符串,并将其重定向到名为image的控制器,后面跟着字符串。像这样:app.com/randomstring -> app.com/image/randomstring
。但是当我尝试使用正则表达式在路由配置文件中执行此操作时,它会禁用我的应用程序,而我无法输入" normal"具有已存在的控制器的URL。
我的路线现在看起来如何(我知道它可能非常错误):
$route['(^[A-Za-z0-9]+$)'] = "image/$1";
有没有简单的方法可以使用这个简短的网址重定向而不使用其他假控制器:app.com/i/randomstring -> app.com/image/randomstring
你能否帮助我改进并告诉我,我的正则表达式的哪一部分失败了?
答案 0 :(得分:1)
正如我在评论中提到的,如果没有明确定义图像网址的规格,就没有全面的方法来解决这个问题。甚至YouTube(与library you linked to相关)也使用/watch?v=h8skj3
等网址,其中“watch”是触发器。
使用i/r4nd0m$tring
会使这个问题无法解决,这就是我的建议,但我有另一个想法:
$route['(:any)'] = "image/$1";
// Re-Route all valid controllers
foreach (array('users', 'login', 'blog', 'signup') as $controller)
{
$route[$controller] = $controller;
$route[$controller.'/(:any)'] = $controller.'/$1';
}
unset($controller);
你最后可能需要图片路线,我不是100%肯定。这应该将所有路由到image/
,除了您定义的控制器。您甚至可以使用glob()
或其他东西来扫描控制器目录,以获取PHP文件以填充数组。
让一个字符短于i/string
的另一种方法可能是使用字符触发器,例如example.com/*randomstring
,但这有点傻,i/
更清晰,显然更容易部署。