我获得了带有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/.......
)
答案 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参数 - 您的代码将更加健壮:
/?r=urlencodedurl
这与路线无关,因此无论使用的网址如何,都不会破坏或成为问题。您可以通过请求对象访问get args:
$r = $this->request->query['r']