我的routes.php中有以下路线
Router::connect('/:lang/detail/:id/*', array('controller' => 'main', 'action' => 'detail'), array('lang' => '[a-z]{3}'));
以及以下网址
http://www.cyclistsroadmap.com/eng/detail/1380/Ferguson++119th/
但以下情况并非如此:
http://www.cyclistsroadmap.com/eng/detail/1380/Ferguson+%2f+119th/ (%2f是url编码的斜杠)
在我看来,贪婪的明星应该采取任何东西,但它似乎不喜欢那里的编码斜线。这是我做错了还是Cakephp中的一个真正的错误?
答案 0 :(得分:5)
确保在Apache中启用了AllowEncodedSlashes指令:
AllowEncodedSlashes on
可在此处找到更多信息:
http://httpd.apache.org/docs/2.2/mod/core.html#allowencodedslashes
答案 1 :(得分:3)
虽然这可能不适用于您的情况,但我遇到了类似的问题,我通过以下方式解决了这个问题。
我们保留一个树的URL,就像一组页面一样,它的路径在保存时得到更新。例如:
Name | Path
Home | /
- Support | /support
-- Legal | /support/legal
-- Privacy | /support/privacy
- About | /about
-- Who We Are | /about/who-we-are
然后我们将路径作为参数传递给我们的控制器。常规的Router :: *方法将对这些斜杠进行编码。我们做的是以下内容:
$redirect = explode('/', $path);
$redirect['controller'] = 'my_controller';
$redirect['action'] = 'my_action';
$this->redirect($redirect);
这个让我们的蛋糕为我重新编码斜线。然后你可以在控制器中重新组装它们
$path = implode('/', $this->request->params['pass']);