【问题标题】:Yii parameterizing hostnames doesn't work with subdomainsYii 参数化主机名不适用于子域
【发布时间】:2014-01-03 23:07:16
【问题描述】:

我正在关注这个“指南”here,我正在尝试让 Yii 从一个 url 解析子域。但是,这似乎不起作用。这是我在主配置文件中的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”来访问我的本地主机(我正在使用 xampp),因为 stackoverflow 的其他一些人建议它在不弄乱主机文件的情况下测试本地主机上的子域。但是,当我尝试使用以下方式访问“子域”时:

$subdomain = $_GET['subdomain'];

PHP 出错并抱怨 subdomain get 参数不存在。我得到的确切错误消息:

未定义索引:子域

我也尝试在 apache 中启用 vhosts 并将 localhost 添加到 windows 主机文件,但这仍然不起作用。 Yii 是否必须启用虚拟主机才能执行此操作?我上面提到的“指南”没有提到需要启用虚拟主机。

【问题讨论】:

  • 对于好奇的人,我放弃了尝试让 Yii 解析出子域。最后,我只是用php手动解析url。

标签: php apache yii


【解决方案1】:

把你的网址改成这个

'http://<subdomain:\w+>.lvho.st/<controller:\w+>/<action:\w+>' => '<controller>/<action>',

并且在控制器的相应动作中不要忘记设置一个名称为子域的参数

public function actionWhatever($subdomain)
{

echo $subdomain;
}

【讨论】:

  • 我试过你的建议,Yii 给我的只是“错误 400 你的请求无效”。我认为这是 Yii 试图说它找不到 $subdomain 变量。我的 yii 东西位于文件夹中是否重要?换句话说,index.php 会在“localhost/folder”中找到。
  • 你知道我是否需要在 apache 中启用 vhost 并编辑主机文件吗?这是我最初问题的第二部分。
【解决方案2】:

处理参数化子域有点棘手。您需要先添加协议(http:// 或 https://)。

如果您需要在主生产系统上支持 SSL 和非 SSL 路由,那么棘手的是。如果是这种情况,您要么需要大量重复的路由,要么在使用 UrlManager 类覆盖时添加协议

【讨论】:

    猜你喜欢
    • 2015-11-30
    • 2015-05-27
    • 2021-10-02
    • 2018-08-10
    • 2017-10-03
    • 1970-01-01
    • 2014-10-06
    • 1970-01-01
    • 2020-01-07
    相关资源
    最近更新 更多