CakePHP在基本路径中路由命名参数(/)

时间:2013-02-13 19:01:39

标签: php cakephp routes cakephp-2.2

我获得了带有r参数的用户引荐来源。 (r:code)。

它适用于所有:controller/:action/*页面,但是当尝试将其传递给基本路径(/)时,我的网络服务器返回错误403.

这是我的routes.php文件:

    Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home'));
    Router::connect('/pages/*', array('controller' => 'pages', 'action' => 'display'));
    Router::connectNamed(array('r' => '[\d]{4}'));

这些网址效果很好:

http://example.com/pages/home/r:1234
http://example.com/apples/eat/r:1234

但它不起作用:

http://example.com/r:1234

怎么了?

问题:是否可以从网址捕获引荐来源代码?或者最好使用传递的参数? (http://example.com/1234/controller/action/.......

2 个答案:

答案 0 :(得分:2)

Apache 2.2实际上APR test_safe_name()函数故意不允许这种情况 “:”Windows服务器上的URI中的字符。因为这基本上是为了避免像http://www.mysite.com/C:/SomeFile.exe这样的网址,但实际上很烦人。 此外,Windows FindFirstFile()函数将返回ERROR_INVALID_NAME 对于尝试使用数据流访问的任何名称,而不是ERROR_FILE_NOT_FOUND 人物。 选择“:”字符作为MediaWiki中的命名空间分隔符是一个 不幸的是在Windows服务器上使用。

答案 1 :(得分:1)

使用get参数

如果使用get参数 - 您的代码将更加健壮:

/?r=urlencodedurl

这与路线无关,因此无论使用的网址如何,都不会破坏或成为问题。您可以通过请求对象访问get args:

$r = $this->request->query['r']