我的应用程序是为了使用Yii clean urls而编写的。 urlManager将urlFormat设置为path,因此应用程序需要“/ home / login / 12”形式的参数。
我的问题是我正在使用第三方API类,它希望以“/ api / login?user_id = 12& foo = 234234& bar = xyzzy”的形式进行回调。这些参数在$ _GET中不可用,因为Yii不会将它们解释为单独的参数。
如何告诉urlManager为这个控制器使用 get urlFormat?
更新:
urlManager的配置选项:
'urlManager'=>array(
'urlFormat'=>'path',
'rules'=>array(
// Other paths
'/' => 'home/index',
'<controller:\w+>/<id:\d+>'=>'<controller>/view',
'<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
'<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
),
),
我的测试查询字符串:
http://localhost/testcontroller/testaction?id=x&blah=y
http://localhost/testcontroller/testaction/?id=x&blah=y
我正在使用Yii版本1.1.10.r3566。
答案 0 :(得分:1)
正如dInGd0nG所指出的,我们的重写规则存在问题。
他们是这样的:
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ index.php?req=$1
什么时候应该这样:
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule . index.php
答案 1 :(得分:1)
事实上。我使用Nginx并遇到了同样的问题。事实证明我的原始nginx设置是错误的:
location / {
# Redirect everything that isn't a real file to index.php
try_files $uri $uri/ /index.php?r=$uri;
}
我将其更改为以下内容并显示参数。
location / {
# Redirect everything that isn't a real file to index.php
try_files $uri $uri/ /index.php?r=$uri&$args;
}
答案 2 :(得分:0)
“如何告诉urlManager为这个控制器使用get urlFormat?”
您最好的选择可能是覆盖UrlManager和createUrl / parseUrl函数,以便您可以以自己的自定义方式处理这一条路径。