【问题标题】:Codeigniter Routes, unexpected behavior and don't know whyCodeigniter Routes,意外行为,不知道为什么
【发布时间】:2012-11-17 22:08:51
【问题描述】:

所以,我不知道过去我在少数几个网站上用代码点火器做过多少次类似的事情。但是,只是给自己一个新副本,并在新站点上开始重建我已经遇到了一个我无法弄清楚的扭曲小问题,我不知道我在这个等式中缺少什么..

所以这是我目前的路线:

$route['default_controller'] = "home";
$route['404_override'] = 'home/unknown';

$route['post/(:any)/(:any)'] = 'post/$1/$2';
//$route['post/(:any)'] = 'post/$1';
//$route['post'] = 'post';

$route['host-hotel'] = 'host_hotel';
$route['floor-plan'] = 'floor_plan';
$route['wine-facts'] = 'wine_facts';
$route['exhibitor-application'] = 'exhibitor_application';

$route['photo-gallery'] = 'photo_gallery';
$route['video-gallery'] = 'video_gallery';

现在问题出在这个人身上。

$route['post/(:any)/(:any)'] = 'post/$1/$2';

我什至尝试命名分段文章而不是帖子,认为它可能是 CI 中某种受保护的名称。如果您注意到这一行上方,我还尝试添加 URL 的变体,以便它可以只处理第一个片段或之后的一个或两个片段。授予它他们在这个例子中被注释掉,但没有工作。

如果我转到domain.com/post,则行为符合预期。之后的任何事情都是问题的开始。如果我在那里做了任何数字或字母或组合..

ie:domain.com/post/s2hjdomain.com/post/s2hj/avd 页面开始表现得像 404 行为,找不到页面,这对我来说毫无意义,正如我所说,我过去做过这样的路线。对我来说,这条路线看起来合适吗?那么有人有什么想法/建议要寻找什么吗?

【问题讨论】:

  • 你试过$route['post/(:any)/(:any)'] = 'post/method/$1/$2';吗?
  • 我猜你有一个Post 控制器和一个index() 方法,因为你的domain.com/post URL 有效。你试过$route['post/(:any)/(:any)'] = 'post/index/$1/$2';吗?您似乎缺少那里的方法名称。 (除非它真的是 1 美元。)
  • 它是索引的一部分,但是.. 你提出了一个有效的观点。也许我确实需要在其中包含索引(虽然以前没有,但值得一试)。

标签: php codeigniter routes


【解决方案1】:

:any 匹配字面上的任何字符,包括斜线。这将在 CodeIgniter 3.0 中进行更改,但目前您可以使用 ([^/]) 来捕获单个段。

【讨论】:

  • 所以完整的路线看起来像$route['post/(:any)(^/)(:any)']
  • 不,像这样:$route['post/([^/]+)/([^/]+])
【解决方案2】:

另一种尝试方法是通过 Good ol' regexp:

$route['post/([^/]+)/([^/]+)'] = 'post/$1/$2';

如果您还需要能够处理总共 2 个 uri 段,请考虑:

$route['post/([^/]+)(?:/([^/]+))'] = 'post/$1/$2';

REGEXP 解释:

() 只是捕获并处理里面的字符串。在另一端还给我们$1$2 等。

(?:)同上,但不捕获$1

[] 是允许的内部事物组合。 [0-9] 只会查找数字。

[^] 是相反的逻辑。除了给定的标志之外的一切。

[^/] 是除/ 之外的所有内容,因此给了我们想要的结果。

【讨论】:

  • 正则表达式,很好......所以,你能帮我解释一下吗,这样我就知道正则表达式对每个表达式的实际含义了吗?
  • 已添加。如果您需要更多信息,请告诉我。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-28
  • 1970-01-01
相关资源
最近更新 更多