繁体   English   中英

通过/config/routes.php的路由错误

[英]Incorrect routing via /config/routes.php

我在基于CI的Web应用程序中设置了以下(基本)路由:

$route['sms/resend/(:num)/(:any)'] = 'sms/resend/$1/$2';

控制器+“重新发送”方法:

class Sms extends CI_Controller {
    public function resend($to, $message) {
        // my code
    }
}

从逻辑上讲,任何不适合该路由的内容都应定向到404页面,而不是sms控制器中的resend()方法。 但是,事实并非如此。 例如,以下URL重定向不正确,它指向相同的controller + method:

http://myapp/sms/resend/uuuu/WhateverMessage

可能是什么问题呢?

经过一番挖掘,我了解到当添加与特定controller/method对相关的默认路由时,CI的默认路由不会被停用。 话虽这么说,如果URL不适合路由$route['sms/resend/(:num)/(:any)'] = 'sms/resend/$1/$2' ,则相同的URL将通过CI运行默认路由机制作为后备,因此仍然需要我使用sms控制器的resend方法。 为了防止这种情况的发生,我需要添加一条自定义路由,该路由遵循与短信重新发送有关的所有其他路由,该路由会将任何其他URL重定向到其他控制器+方法。 如果此控制器不存在,则会获得默认的404页面。 因此,最终的/config/routes.php文件为:

$route['sms/resend/(:num)/(:any)'] = 'sms/resend/$1/$2';
$route['sms/checkoperator/(:num)'] = 'sms/checkoperator/$1';
$route['sms/(:any)'] = 'somewhereovertherainbow';

您的路线

$route['sms/resend/(:num)/(:any)'] = 'sms/resend/$1/$2';

网址必须指向有效数字[0-9]

http://myapp/sms/resend/{!!!NUMBER!!!}/WhateverMessage

我认为该路由文件仅用于重新路由。 您的网址不符合路由条件,因此不会被重新路由! 因此它是正常的,直到相同(在这种情况下!)

这样的事情可能会起作用!

(!:num)/(:any)'] =错误页面(或不存在的页面)

因此,每个不以数字开头的请求都将重定向到错误页面!

语法可能是错误的!

这会很好:

$ route ['sms / resend / [^ 0-9] /(:any)'] ='错误页'; 您必须将错误页面替换为;)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM