0

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

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

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

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

从逻辑上讲,任何不适合路由的东西都应该被定向到 404 页面而不是控制器中的resend()方法。sms然而,情况并非如此。例如,以下 URL 未正确重定向,它转到相同的控制器+方法:

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

可能是什么问题呢?

4

3 回答 3

0

经过一番挖掘,我了解到当controller/method添加与特定对相关的默认路由时,CI 的默认路由不会被停用。话虽如此,如果一个 URL 不适合 route $route['sms/resend/(:num)/(:any)'] = 'sms/resend/$1/$2',那么相同的 URL 将通过 CI 的默认路由机制作为后备运行,所以它仍然将我带到控制器的resend方法。sms为了防止这种情况发生,我需要添加另一个自定义路由,该路由遵循与短信重新发送相关的所有其他路由,将任何其他 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';
于 2013-09-30T09:49:30.573 回答
-1

您的路线

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

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

http://myapp/sms/resend/{!!!NUMBER!!!}/WhateverMessage
于 2013-09-30T09:38:07.907 回答
-2

我认为 rout 文件仅用于重新路由。您的 URL 不符合路由条件,因此不会被重新路由!所以它以正常的方式进行,这是相同的(在这种情况下!)

像这样的东西可以工作!

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

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

语法可能是错误的!

这会很好用:

$route['sms/resend/[^0-9]/(:any)'] = 'errorpage'; 您必须用某些东西替换错误页面;)

于 2013-09-30T09:11:55.883 回答