如果我有这样的路线:
Route::set('test', 'test')
->defaults(array(
'controller' => 'test',
'action' => 'index'
));
我假设只有url mysite.com/test或mysite.com/test/会被发送到此路由,其他任何内容都会被发送到默认路由,或者如果你有一个就捕获所有路由。但是,您可以使用任何查询字符串,它仍然有效。例如,任何这些都可行:
mysite.com/test/?abc
mysite.com/test/?abc=123
mysite.com/test/?abc=123&blabla=lala
基本上你想要的任何东西。如何设置它以使测试路由与查询字符串的URL不匹配?另一个例子可能是:
Route::set('test', 'test(/?order=<order>)', array('order' => 'title|date|author'))
->defaults(array(
'controller' => 'test',
'action' => 'index'
'order' => 'title'
));
在这个例子中,我假设唯一匹配此路由的URL是:
mysite.com/test/?order=title
mysite.com/test/?order=date
mysite.com/test/?order=author
但和以前一样,你可以添加你想要的任何其他查询字符串。
有没有办法让这些无效的查询字符串传递给catch所有路由,将它们发送到404页面?或者我真的必须通过我的所有控制器并检查$ _GET并确保它们确实存在?
答案 0 :(得分:2)
您不应该使用您的路由访问查询参数。
路由与查询字符串完全隔离,不要尝试使用它们,因为您使用的是mod_rewrite。要访问查询参数,您应该使用:
$order = $this->request->query('order');