[英]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.