Cakephp中的编码斜线断开路径

时间:2011-09-01 08:57:18

标签: cakephp

我的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中的一个真正的错误?

2 个答案:

答案 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']);