3

我得到带有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}'));

这些 URL 运行良好:

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/.......)

4

2 回答 2

2

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

于 2013-02-13T22:43:55.780 回答
1

使用 get 参数

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

/?r=urlencodedurl

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

$r = $this->request->query['r']
于 2013-02-13T22:44:52.537 回答