Yii参数化主机名不适用于子域

时间:2014-01-03 23:07:16

标签: php apache yii

我正在关注此“指南”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。

2 个答案:

答案 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类覆盖添加协议