我在基于CI的网络应用程序中设置了以下(基本)路线:
$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
可能是什么问题?
答案 0 :(得分:0)
经过一番挖掘后,我逐渐明白,当添加与特定controller/method
对相关的默认路由时,CI的默认路由不会被取消激活。话虽这么说,如果URL不适合路由$route['sms/resend/(:num)/(:any)'] = 'sms/resend/$1/$2'
,那么相同的URL作为回退通过CI的默认路由机制运行,所以它仍然需要我resend
方法的sms
1}}控制器。为了防止这种情况发生,我需要添加另一个自定义路由,该路由跟随与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';
答案 1 :(得分:-1)
您的路线
$route['sms/resend/(:num)/(:any)'] = 'sms/resend/$1/$2';
url必须指向有效号码[0-9]
http://myapp/sms/resend/{!!!NUMBER!!!}/WhateverMessage
答案 2 :(得分:-2)
我认为路径文件只是用于重新路由。您的网址不符合路由条件,因此不会重新路由!所以这是正常的方式(在这种情况下!)
这样的事情可行!
(!:num)/(:any)'] =错误页面(或不是现有页面)
因此,每个以数字开头的请求都会被重定向到错误页面!
语法可能有误!
这会很棒:
$ route ['sms / resend / [^ 0-9] /(:any)'] ='errorpage'; 您必须通过某些内容替换错误页面;)