分享如何在虛擬主機上進行多站配製的可行方案

發表於2019-05-11

日前,大家都比較喜歡雲主機,喜歡VPS,但如果只是做一些小的網站,就每月最少52元的阿里雲來講,我覺得也蠻貴了,除非你對站的效能要求很高,如果你是此類使用者,那就請繞行此文。現在的域名都是很便宜的,所以,很多朋友在只有一個虛擬主機的情況下,如果想在這臺機器上完成不同站點的安裝就成了一個問題,因為很多便宜的虛擬主機雖然口號上講的是可以繫結多個域名,但多個域名訪問的網站是一樣的,了就是說,只能建一個站。那下面我就把個人的經歷和大家分享一下,至少目前是可行的。

=====================================================

大環境:

1.虛擬主機一臺(具體哪個公司的,這時就不打廣告了)

2.系統:Linux+apache+php+mysql

3.相關配製:

   a.空間1000M,流量30G /月

   b.可以繫結3個主域名,子域名5個

   c.只能建1個站點(如:http://www.abc.com),子站點5個(如:http://sub1.abc.com,http://sub2.abc.com......)

   d.域名目前我準備了兩個www.abc.com,www.efg.com

   e.資料庫3個

   f.將www.abc.com和www.efg.com域名解析到主機

   g.在你的虛擬主機中新增這兩個域名繫結到根目錄(也只能是根目錄,如果是子目錄,那麼也就沒有這篇文章了……)

上面就是我擁有的東西,及簡單的主機商給的一些限制。

最終目標:佈置兩個網站在同一臺伺服器,不同的域名訪問不同的目錄。

+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=

核心的方法:用htaccess進行目錄的分配

具體操作:

1.在網站根目錄新增以下檔案:

|----.htaccess檔案

|----index.php

|----abc目錄

|--------.htaccess檔案

|----efg目錄

|--------.htaccess檔案

網站根目錄的.htaccess檔案,內容如下:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

#abc begin
####--step 1--####
RewriteCond %{HTTP_HOST} ^(www.)?abc.com$
RewriteCond %{REQUEST_URI} !^/abc/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ abc/$1
####--step 2--####
RewriteCond %{HTTP_HOST} ^(www.)?abc.com$
RewriteRule ^(/)?$ abc/index.php [L]
RewriteCond %{HTTP_HOST} ^(www.)?abc.com$
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]
#abc end

#efg begin
####--step 1--####
RewriteCond %{HTTP_HOST} ^(www.)?efg.com$
RewriteCond %{REQUEST_URI} !^/efg/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ efg/$1
####--step 2--####
RewriteCond %{HTTP_HOST} ^(www.)?efg.com$
RewriteRule ^(/)?$ efg/index.php [L]
RewriteCond %{HTTP_HOST} ^(www.)?efg.com$
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]
#efg end

</IfModule>
abc目錄中的.htaccess檔案如下:

<IfModule mod_rewrite.c>
RewriteEngine On RewriteBase /abc

# 禁止通過非本網站域名訪問
RewriteCond %{HTTP_HOST} !^(www.)?abc.com$ [NC]
RewriteRule ^.*$ [L,r=404]

#去index.php
RewriteCond %{HTTP_HOST} ^(www.)?abc.com$
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
</IfModule>
接下來的efg同理

============================

下面來講一下,我在佈置think專案時候遇到的問題,第一如果在abc目錄安裝THINKPHP專案,會有一些問題。在根目錄的index.php中我們要做一個判斷:

$url = $_SERVER["HTTP_HOST"];
if(strpos($url, 'abc') === false){
	if(version_compare(PHP_VERSION,'5.3.0','<'))  die('require PHP > 5.3.0 !');
	define('APP_DEBUG',true);
	define('APP_PATH','./abc/Application/');
	require './abc/Core/Loader.php';
	define('ENGINE_NAME','sae');
	return;
}
也就是說,這裡要載入abc目錄中的index.php 檔案中的內容。

第二個,THINKPHP的U方法生成的路徑會是類似

http://www.abc.com/abc/index.php?m=Home&a=index........類似這樣的。看到中間的加粗的abc沒有?目前我的解決方法是修改了THINKPH的核心檔案U方法,最後加了一行

$url = str_replace('/abc','',$url);
return $url;
這裡還請大俠指教,有沒有更安全,更合理的方法。

到此為止,這個就算完了,因為我這個試驗的站還在建設中,不知道後面還會不會出現什麼問題,如果發現了,也會及時把見聞和大家分享……

評論(1)

相關文章