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