我正在关注此“指南”here,我试图让Yii从网址解析子域名。但是,这似乎不起作用。以下是我在主配置文件urlManager
中的内容:
'urlManager'=>array(
'urlFormat'=>'path',
'showScriptName' => false,
'rules'=>array(
'login' => 'site/login',
'<controller:\w+>/<id:\d+>' => '<controller>/view',
'<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
'<controller:\w+>/<action:\w+>' => '<controller>/<action>',
'<subdomain:\w+>.lvho.st' => '<controller>/<action>', <--this one
),
),
我正在使用“lvho.st”来访问我的localhost(我正在使用xampp),因为stackoverflow上的其他人已经建议它在localhost上测试子域而不会弄乱主机文件。但是,当我尝试使用:
访问“子域”时$subdomain = $_GET['subdomain'];
PHP错误输出并抱怨子域get参数不存在。我收到的确切错误消息:
未定义的索引:子域
我还尝试在apache中启用vhost并将localhost添加到Windows主机文件,但这仍然无效。是否必须为Yii启用vhost才能执行此操作?我上面提到的“指南”没有提到需要启用vhost。
答案 0 :(得分:1)
将您的网址更改为此
'http://<subdomain:\w+>.lvho.st/<controller:\w+>/<action:\w+>' => '<controller>/<action>',
并且在控制器的相应操作中不要忘记设置名称为子域的参数,如
public function actionWhatever($subdomain)
{
echo $subdomain;
}
答案 1 :(得分:1)
处理参数化子域有点棘手。您需要先添加协议(http://或https://)。
如果您需要在主生产系统和非SSL路由上支持SSL,那么棘手的是。如果是这种情况,您将需要大量重复路由或使用UrlManager类覆盖添加协议