【问题标题】:handling CodeIgniter routes errors?处理 CodeIgniter 路由错误?
【发布时间】:2013-04-09 08:46:10
【问题描述】:

我有一个非常简单的路由规则,我用来放在 CodeIgniter 中的路由配置文件中。

$route['building/(:num)'] = 'building/$1'; 

路由规则工作得很好,没有任何问题,我发现的唯一问题是,当将变量传递给参数时,它会显示此错误消息

An Error Was Encountered

The URI you submitted has disallowed characters.

我知道我的规则告诉 CodeIgniter 只接受数字作为参数,但如果参数错误,我需要这样做,它必须重定向到另一个定义的页面或 url,而不是显示此错误。
我不知道是否可以通过配置文件来做到这一点,或者我应该编写一个控制器来做到这一点
谢谢

【问题讨论】:

    标签: php codeigniter


    【解决方案1】:

    路由从不清理或错误检查 URI,它们只是为了匹配一个模式。生成该错误是因为 URI 中存在 application/config/config.php 中的 $config['permitted_uri_chars'] 设置中不存在的字符,然后由 _filter_uri() 方法中的 URI 类检查。

    在不知道您尝试使用的变量是什么样子的情况下(它显然包含对 URI 不友好的字符),我建议您在尝试在您的 URL 中使用它们之前验证和清理这些变量。 尤其是如果它们是用户生成的。不要相信人。永远。

    您的一些选择包括:

    1. 清理/检查变量的值以查看它是否包含不应出现在 URI 中的字符。默认配置设置几乎是 URI 字符的规范(尽管其他一些字符也是允许的),所以如果可能的话,我会尽量坚持这一点(尤其是如果你不知道自己在做什么)。

    2. 更改您的 permitted_uri_chars 列表以包含其他字符(不推荐,请参阅 #1)。

    3. 扩展 URI 类并替换/修改 _filter_uri() 方法,用重定向或其他代码替换 show_error() 部分以满足您的需要。也不是很推荐,因为库不应该控制你的重定向。

    【讨论】:

      猜你喜欢
      • 2019-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多