2014-11-04 72 views
0

我真的很佩服Yii2高级模板将后端和前端分割成单独的目录,保持它的结构化,但我没有得到的是如何将它部署到服务器。在这一天结束时,我将不得不将其上传到apache服务器,并且前端将不得不在http://domain.com/上访问,而后端将不得不在http://domain.com/admin/之类的东西上。服务器基于apache。Yii2高级模板后端和前端在同一个域上

这是如何实现的?

谢谢!

+0

你将在共享主机或专用服务器上上传项目? – ahb360 2014-11-05 19:33:54

+0

你会想在apache中创建2个不同的虚拟主机。一个将domain.com重定向到前端/ web文件夹,另一个重定向domain.com/admin(或admin.domain.com)到后端/ web / – 2014-11-07 17:59:36

回答

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'与您的项目的路径

0

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

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

根网站的.htaccess的:

RewriteEngine on 
RewriteRule ^admin/(.*)$ backend/$1 [L] 
RewriteRule ^(.*)$ frontend/$1 [L] 

我用的第一个规则来实现site.com/admin - >映射到site.com/backend。然后后端有htaccess的映射到网页。我刚刚为你添加了第二条规则,我没有测试过。所以如果url路径是“admin”,传递给后端,否则一切都会传递给前端。

两者 “前端” 和 “后端” 目录内部htaccess的(隐藏的URL的Web):

Options -Indexes 

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

两者 “前端/网络” 和 “后端/网” 目录内部的.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 

在后端/配置/ main.php和前端/配置/ main.php,补充一点:

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

这将启用漂亮的网址。


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


你应该看看Heroku,CloudControl和OpenShift等云端主机。我个人喜欢OpenShift。然后,您使用“git push”上传您的更改,而不是搞乱老派的FTP。

0

将所有文件复制到站点的根文件夹。 创建admin文件夹位于网站的根目录。 的前端/网络站点根目录和后端的内容/网页将内容复制到siteroot /管理文件夹。 并改变根/ 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(); 

,并更改根的内容/管理/ 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(); 
相关问题