1

問:htaccess的基於主機名重定向到一個子目錄

什麼規則集做我需要做以下的重定向:

[1] http://www.xyzblog.com/foo/bar.php => htdocs/projects/xyzblog/foo/bar.php 
[2] http://www.xyzblog.com/js/jquery-min.js => htdocs/js/jquery-min.js 

[3] http://www.bigcommerce.ch/images/baz.png => htdocs/projects/bigcommerce/images/baz.png 
[4] http://www.bigcommerce.ch/css/reset.css => htdocs/css/reset.css 

在文獻[2]和[4]請求的文件確實存在於原始路徑中,因此不發生重定向。

背景:

我有使用Apache朋友的優秀XAMPP一個WAMP ENVO。我在多個項目爲不同的客戶,並建立了以下目錄結構:

htdocs 
    + css 
    + images 
    + includes 
    + js 
    + projects 
    + bigcommerce 
    + xyzblog 
    ... 

當我開始一個新項目,我創建下的項目名稱相同的目錄中工作;此外,我在客戶端的主機名後命名項目。因此,如果我開始製作一個生產場地爲http://www的項目。 dreamvacation.com我在projects目錄下添加一個dreamvacation目錄。

最後我暫時,下面一行添加到我的hosts文件中C:\WINDOWS\system32\drivers\etc

127.0.0.1 dreamvacation.com 

那種方式dreamvacation.com所有請求將被短路到我的本地主機。

我仍然需要一個組件才能夠在本地主機上編碼,並期望它在上傳到生產服務器時的行爲方式相同。這是一個htaccess文件,用於檢查請求中的主機名,並重定向到具有相同名稱的目錄,而不是頂級域標識符(.com.net等)。只有當請求的文件不存在時,重定向纔會發生。這最後一個條件是因爲我經常使用的文件在htdocs下的目錄中 - 例如我只有一個jquery-min.jshtdocs/js和只有一個藍圖css在htdocs/css/blueprint/screen.css。但是,每個項目也有一個js,css,...子目錄,但僅限於項目特定的文件。

這怎麼可能實現?

+1

一般說...考慮使用`vhosts`。 http://httpd.apache.org/docs/2.0/vhosts/examples.html – thedom 2011-01-26 19:52:45

回答

2

你應該看看基於命名的虛擬主機。在每個客戶端目錄上啓動目錄根。這是:-)

爲共享folers你可以使用「別名」說明在這些虛擬主機,這樣一些目錄將始終在目標目錄樹中的同一個地方真正的解決方案。 並使用鏈接共享您的共享文件夾。

無論如何,你也可以在你自己的方式做。它用於大規模虛擬主機,寫成千上萬的虛擬主機是一種痛苦,mode_rewrite是一個很好的替代解決方案。

要檢測存在的文件和目錄,您可以使用RewriteCond指令,並在文件存在時防止重寫。 然後在real重寫你需要重用apache變量%{HTTP_HOST}。所以,這是基於Apache文檔實例基於用戶名域我沒有測試,但這樣的事情應該是一個很好的起點(用戶RewriteLogLevel和RewriteLog調試),:

RewriteEngine On 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{HTTP_HOST}     ^www\.[^.]+\.com$ 
RewriteRule ^(.+)      %{HTTP_HOST}$1   [C] 
RewriteRule ^www\.([^.]+)\.com(.*) /htdocs/projects/$1$2 

,你應該有關更多詳細信息,請參閱this apache doc page以獲取更多詳細信息,但其中一些示例包含基於文件的規則和您在開發環境中不需要的檢查。記住使用VirtualHosts而不使用mod_rewrite肯定比較容易,但如果你願意,mod_rewrite可以做很多事情。

+0

謝謝regilero。我更喜歡htaccess,因爲它需要一次又一次地照顧它。這樣我所需要做的就是將主機名添加到主機文件中,這很簡單快捷。 – 2011-01-26 21:19:16

相關問題