2014-11-04 106 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();