Yii2高级模板后端和同一域的前端

时间:2014-11-04 10:08:57

标签: php apache yii yii2

我真的很佩服Yii2高级模板将后端和前端划分为单独的目录,保持结构化,但我不知道如何将它部署到服务器上。在一天结束时,我将不得不将其上传到apache服务器,并且必须在http://domain.com/上访问前端,并且后端必须是http://domain.com/admin/之类的内容。服务器基于apache。

如何实现这一目标?

谢谢!

3 个答案:

答案 0 :(得分:1)

要在前端访问后端应用程序,您可以使用符号链接:

在linux命令shell中

ln -s project_dir/backend/web project_dir/frontend/web/admin

或在Windows上

mklink /J project_dir\frontend\web\admin project_dir\backend\web

只需将'project_dir'替换为项目路径

即可

答案 1 :(得分:1)

将所有文件复制到站点的根文件夹。 在站点根目录中创建 admin 文件夹。 将 前端/网站 的内容复制到网站根目录,将 后端/网络 的内容复制到 siteroot / admin 文件夹。 并将 root / index.php 的内容更改为:

defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'dev');

require(__DIR__ . '/vendor/autoload.php');
require(__DIR__ . '/vendor/yiisoft/yii2/Yii.php');
require(__DIR__ . '/common/config/bootstrap.php');
require(__DIR__ . '/frontend/config/bootstrap.php');

$config = yii\helpers\ArrayHelper::merge(
    require(__DIR__ . '/common/config/main.php'),
    require(__DIR__ . '/common/config/main-local.php'),
    require(__DIR__ . '/frontend/config/main.php'),
    require(__DIR__ . '/frontend/config/main-local.php')
);

(new yii\web\Application($config))->run();

root / admin / index.php 的内容更改为:

defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'dev');

require(__DIR__ . '/../vendor/autoload.php');
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');
require(__DIR__ . '/../common/config/bootstrap.php');
require(__DIR__ . '/../backend/config/bootstrap.php');


$config = yii\helpers\ArrayHelper::merge(
    require(__DIR__ . '/../common/config/main.php'),
    require(__DIR__ . '/../common/config/main-local.php'),
    require(__DIR__ . '/../backend/config/main.php'),
    require(__DIR__ . '/../backend/config/main-local.php')
);

$application = new yii\web\Application($config);
$application->run();

答案 2 :(得分:0)

在您网站的根目录中,您需要放置.htaccess文件。如果URL包含“admin”,您将重定向到后端的物理和真实路径。否则,使用物理和真实路径前端。此外,您可以通过在前端和后端的目录中放置另一个.htaccess来从URL中删除“/ web /”。因此root htaccess将重定向到前端或后端目录,然后将其传递给Web。它是一种菊花链方法,但确实有效。

您还可以使用符号链接或设置虚拟主机(虚拟主机)。老实说,vhost方法将是最好的情况。但是,这也完成了工作。除非您拥有大量流量,否则不应过多影响性能。

您网站的根目录.htaccess:

Options -Indexes

RewriteEngine on
RewriteRule ^(.*)$ web/$1 [L]

我使用第一条规则来实现site.com/admin - >映射到site.com/backend ..然后后端有htaccess映射到web。我刚为你添加了第二条规则,我还没有测试过。因此,如果url路径为“admin”,则传递给后端,否则其他所有内容都会传递给前端。

.htaccess在“前端”和“后端”目录中(从网址隐藏网页):

RewriteEngine on

# If a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# Otherwise forward it to index.php
RewriteRule . index.php
.htaccess在“frontend / web”和“backend / web”目录中(根据漂亮网址):

'components' => [
    'urlManager' => [
        'enablePrettyUrl' => true,
        'showScriptName' => false,
        'enableStrictParsing' => false,
        'rules' => [
            // ...
        ],
    ],
],

在backend / config / main.php和frontend / config / main.php中添加以下内容:

{{1}}

这将启用漂亮的网址。

我会将整个项目置于“public_html”目录之上,或者您的公共Web根目录。这样,任何文件都不可访问。然后在物理上复制您希望它们的Web目录的内容。即:将“frontend / web”的内容复制到您网站的根目录中。然后创建一个名为“admin”的文件夹,并将“backend / web”的内容放入其中。然后编辑index.php文件以调整yii的路径。

你应该真正关注像Heroku,CloudControl和OpenShift这样的云主机。我个人喜欢OpenShift。然后使用“git push”上传您的更改,而不是弄乱老式FTP。