【问题标题】:CodeIgniter URI Routing and empty segmentCodeIgniter URI 路由和空段
【发布时间】:2013-03-16 12:00:02
【问题描述】:

我现在像这样在我的 codeigniter 配置中设置 uri 路由

$route['user/:any'] = "users";

这样的请求一切正常

http://localhost/user/1

但如果我尝试请求

http://localhost/user/

所以 uri 段是空的,我收到错误

404 Page Not Found
The page you requested was not found.

如何避免这种情况?我试过用

$user = $this->uri->segment(2);
if (!isset($user)) redirect('/', 'refresh');

但这不起作用。

【问题讨论】:

  • 只是出于好奇,第二段中的“1”是干什么用的?
  • 我认为1只能是...管理员;D
  • 现在只是字符串来测试输出,计划名称/id
  • 还是不行?你试过$route['user'] = 'users'; $route['user/(:any)'] = 'users/index/$1'; 吗?当您像 http://something.com/user/2 一样访问它时,控制器 usersindex 方法中的 var_dump($slug); die(); 是什么?

标签: php codeigniter url-routing


【解决方案1】:

您可以添加其他路线,例如:

$route['user'] = "users"

【讨论】:

  • 这是有效的,与 if (empty($user)) redirect('/', 'refresh'); 完美,只有减号是添加路线
【解决方案2】:

在你的控制器中构建你的函数而不是这个:

public function index()
{
...

试试这样的:

public function index($slug = '')
{

if ($slug = '') {
   // redirect code here
}
else {
   // if there is something in $slug then load this code
}

也许你的路线应该是这样的:

$route['user'] = 'users';
$route['user/(:any)'] = 'users/index/$1';

【讨论】:

  • 试过这个index($slug = ''),因为codeigniter uri路由只能获取methord参数作为$this->uri->segment(2 );
  • 要为您的方法获取参数,而不是 $route['user/:any'] = "users"; 试试这个:$route['user/(:any)'] = 'user/index/$1'; 我建议。用户控制器的文件名是什么?用户或用户?
  • 控制器 users :) 试过 $route['user/(:any)'] = 'users/index/$1'; uri 路由工作正常,但没有参数仍然 404
  • 如果你尝试:var_dump($slug); die(); 作为public function index($slug = '') { 之后的第一件事会发生什么?你确定在浏览器中你有这样的链接:http://something.com/user/2 而不是 http://something.com/index.php/user/2 之类的链接?
  • http://something.com/user/2 之后应该有回显的值。您如何通过浏览器访问此方法?你的网址是什么?如果您不想透露您的域名,您可以更改它。
【解决方案3】:

试试

$route['user:any'] = "users";

【讨论】:

    【解决方案4】:

    我认为你需要修复语法,请尝试:

    $route['user/(:any)'] = "users";
    

    您需要在通配符 (:any) 周围加上括号。

    参考:http://ellislab.com/codeigniter/user-guide/general/routing.html 查看示例

    【讨论】:

    • 我也有同样的想法,但经过一些测试,:any 也可以。不过,最好遵循文档。
    • CI 文档显示了一个不带括号的示例。我认为如果您尝试捕获段值以在新路线中重用,则需要括号。
    • 你说得对,不加括号就不能使用反向引用。 CodeIgniter supports :any,但不会自动加括号。
    • 有道理,CI 可能依赖于正则表达式解析方法。
    猜你喜欢
    • 2013-06-19
    • 1970-01-01
    • 2014-12-20
    • 1970-01-01
    • 1970-01-01
    • 2012-11-26
    • 2014-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多