【发布时间】:2013-12-26 16:25:42
【问题描述】:
我们的 URL 结构一直在快速发展,我们的日志有时会出现 404 错误,这些错误来自试图访问旧的、不存在的 URL 的用户。我想保持日志干净,并避免向这些用户显示 404 页面。有没有办法设置一个“后备”路由,这样如果没有找到该操作,用户就会进入控制器的索引(或除错误页面之外的任何地方)。
我知道如何有条件地手动连接路由。到目前为止,我们就是这样处理这个问题的,但它是劳动密集型的,因为每次 URL 结构发生变化时我们都需要添加一个新的。
例如:
Router::connect('/old/url/:param', array('controller' => 'new', 'action' => 'index'), array('param' => '.*[^0-9/]+.*'));
如果我们能做这样的事情会容易得多:
Router::connect('/some_controller/ + ...anything that doesnt exist', array('controller' => 'some_controller', 'action' => 'index') );
这可能吗?
更新
为了澄清,我不简单地使用通配符的原因是:我需要连接/重定向的 URL 并不都遵循相同的模式。为了演示,这里有一些我正在尝试重定向的 URL...
example.com/a/b/ --> example.com/a/
example.com/a/b/34 --> example.com/a/
example.com/a/c/ --> example.com/a/
但我不想重定向这个...
example.com/a/d
所以我的问题并没有通过 Burzum 下面的建议(翻译成这个例子)解决:Router::redirect('/a/b/*' ... 或 Router::redirect('/a/*' ...,因为这会错过应该定位的链接或应该(分别)定位的链接。
当然,我可以为我想要定位的每个链接编写新的连接/重定向路由,但避免这种麻烦是这个问题的重点。此外,它是一个完全“反应式”的解决方案,因为我需要在检查调试日志并查看对不存在的控制器/操作/的请求后应用新路由。我正在尝试积极主动并防止当事情发生变化时,我的日志会被错误的请求填满。
【问题讨论】:
标签: php cakephp routing cakephp-2.0