【问题标题】:CakePHP routes named parameters in base path (/)CakePHP 在基本路径 (/) 中路由命名参数
【发布时间】:2013-01-29 10:31:38
【问题描述】:

我使用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

怎么了?

问题: 是从 URL 中获取引用代码的方法吗?或者最好使用传递的参数? (http://example.com/1234/controller/action/.......)

【问题讨论】:

    标签: php cakephp routes cakephp-2.2


    【解决方案1】:

    使用 get 参数

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

    /?r=urlencodedurl
    

    这与路由无关,因此无论使用什么 url,都不会中断或成为问题。您可以通过请求对象访问 get args:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • @AD7six:是的,我的本地主机是 Windows PC。
      • 嗨阿里雷扎(萨拉姆!)。是否可以将: 更改为另一个字符?例如,将其更改为-
      • @kikio you can 但这真的值得吗? p.s. google your error messages =)
      猜你喜欢
      • 2011-12-23
      • 1970-01-01
      • 2012-05-13
      • 2011-03-17
      • 2010-10-17
      • 1970-01-01
      • 1970-01-01
      • 2019-07-24
      • 1970-01-01
      相关资源
      最近更新 更多