日前,大家都比較喜歡雲主機,喜歡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;這裡還請大俠指教,有沒有更安全,更合理的方法。
到此為止,這個就算完了,因為我這個試驗的站還在建設中,不知道後面還會不會出現什麼問題,如果發現了,也會及時把見聞和大家分享……