一些虛擬主機或其類似物,如阿里雲的「彈性Web託管」,是不支持通過常規方法為不同域名分別指定根目錄的,給需要將多個不同域名的網站託管在一處的客戶帶來不便。一般來說,虛擬主機或其類似物的終端客戶不具有母機的控制權,一定程度上制約了伺服器軟體(如Apache)功能的發揮,好在Apache提供了一種用戶在其可及之目錄下編纂「.htaccess」文件來局部應用某些設定的方法,我們可以藉此啟用mod_rewrite,通過自訂重寫規則來為多個域名分別「虛構」各自的根目錄。稍有常識的人對Apache的mod_rewrite都不陌生,它常用於偽靜態的實現,它的實質其實是一個在客戶端請求被接受後、伺服器腳本被執行或直接返回對應靜態文件前竄改請求的文件名的「插件」,具有多種應用方向,是生產生活中不可或缺的法寶。
下面以本站為例,介紹分別為imgsrc.papwin.com、verify.papwin.com和cee.papwin.com三個子域名虛構根目錄的代碼。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
# wordpress 之偽靜態實現,與本文內容無干
RewriteRule ^index\.php$ – [L]
RewriteCond %{HTTP_HOST} ^(www\.)?papwin\.com$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
#為 imgsrc.papwin.com 虛構根目錄
RewriteCond %{HTTP_HOST} ^imgsrc\.papwin\.com$
RewriteCond %{REQUEST_URI} !^/imgsrc/
RewriteRule ^(.*)$ /imgsrc/$1 [L]
#為 verify.papwin.com 虛構根目錄
RewriteCond %{HTTP_HOST} ^verify\.papwin\.com$
RewriteCond %{REQUEST_URI} !^/verify/
RewriteRule ^(.*)$ /verify/$1 [L]
#為 cee.papwin.com 虛構根目錄
RewriteCond %{HTTP_HOST} ^cee\.papwin\.com$
RewriteCond %{REQUEST_URI} !^/cee/
RewriteRule ^(.*)$ /cee/$1 [L]
</IfModule>