我有一个非常简单的路由规则,我曾经把它放在CodeIgniter中的路由配置文件中。
$route['building/(:num)'] = 'building/$1';
路由规则正常工作没有问题我发现唯一的问题是,当将变量传递给参数时,它显示此错误消息
An Error Was Encountered
The URI you submitted has disallowed characters.
我知道我的规则告诉CodeIgniter只接受数字作为参数但我需要做的是在错误参数的情况下它必须重定向到另一个定义的页面或网址而不是显示此错误。
我不知道是否可以通过配置文件来完成它,或者我应该写一个控制器来执行此操作
感谢
答案 0 :(得分:0)
路由从不清理或错误检查URI,它们只是为了匹配模式。生成错误的原因是URI中的字符在$config['permitted_uri_chars']
中的application/config/config.php
设置中不存在,然后由_filter_uri()
方法中的URI类检查。
在不知道您尝试使用的变量是什么样的情况下(它显然具有URI不友好的字符),我建议在尝试在您的URL中使用它们之前验证并清理这些变量。 特别是,如果它们是用户生成的。不要相信别人。如初。
您的一些选择包括:
清理/检查变量的值,看它是否包含不应该在URI中的字符。默认的配置设置几乎是URI字符的标准(虽然其他一些也是允许的),所以如果可能的话,我会尽量坚持下去(特别是如果你不知道你在做什么)。
更改您的permitted_uri_chars
列表以包含其他字符(不是真的推荐,请参阅#1)。
扩展URI类并替换/修改_filter_uri()
方法,将show_error()
部分替换为重定向或其他代码以满足您的需要。也不是真的推荐,因为库不应该控制你的重定向。