2009-04-22 91 views
5

(我知道這是不是一個編程問題本身,但它涉及的正則表達式,所以至少是邊緣...)Apache和mod_rewrite的:重定向域子目錄

的設置:

Apache 2.0與Windows上的mod_rewrite。有兩個域,我們稱它們爲domain1.example和domain2.example。我想在同一臺服務器(「server1」)上託管兩個域,所以我將它們指向相同的IP地址。

現在,如果用戶在他的瀏覽器中鍵入「domain2.example」,我希望他在服務器上的子目錄**中結束,但保留他輸入的域完整(「domain2.example/domain2 /」 )。當然,重定向必須保持該域/目錄下的頁面上的所有絕對鏈接和相對鏈接完好無損。

這可能與mod_rewrite(或Apache虛擬主機或其他方法),我該怎麼做?

**在這種情況下,「子目錄」實際上不是磁盤上的文件夾,而是使用Apache「Location」指令創建的虛擬文件夾。

謝謝。

回答

2

我不相信你需要使用mod_rewrite,你應該能夠像你所建議的那樣使用虛擬主機。要做到這一點,你將擁有一個帶有servername domain2.example的虛擬主機,它指向你想要的目錄。這也將爲domain1.example使用ServerAlias指令,因此對此的請求將轉到相同的目錄。

請參閱ServerAliasDocumentRoot的文檔。另外請注意,如果你想讓目錄顯示在URL中,你的將會需要使用mod_rewrite。

3

假設域是獨立的,建議的解決方案是虛擬主機。

你可以在apache website找到文檔。

+0

請問DocumentRoot指令(在虛擬主機配置部分)工作轉發到一個「子目錄」,這實際上是一個「位置」,而不是服務器上的物理文件夾? – ObiWanKenobi 2009-04-22 06:25:58

6

我假設你沒有訪問Apache配置,否則,是的,虛擬主機是你最好的選擇。如果你不這樣做,但是,這可以放在.htaccess文件和應該做的伎倆:

RewriteEngine on 
RewriteCond %{HTTP_HOST} ^(.+)\.yourwebsite\.com$ 
RewriteRule ^/(.*)$ /path/to/your/subdomains/%1/$1 [L] 

所以要http://foo.yourwebsite.com/bar的請求會去/path/to/your/subdomains/foo/bar