2012-01-13 107 views
2

我已經閱讀了Apache上的大量虛擬主機幫助,但作爲一個相對的新手,我留下了一些困惑。我知道我的問題必須是可以實現的,因爲它是一個非常基本的問題,但我迷路了...虛擬主機映射到目錄結構

基本上我有很多指向我的服務器的虛擬主機,以及它們指向它們的DocumentRoot的文件結構是一致的。 ..如

www.mydomain.com -> /home/blah/vhosts/mydomain.com/www/public 
abc.mydomain.com -> /home/blah/vhosts/mydomain.com/abc/public 

www.another.co.uk -> /home/blah/vhosts/another.co.uk/www/public 
def.another.co.uk -> /home/blah/vhosts/another.co.uk/def/public 

如果可能的話,我也需要重定向非www *到www *,但考慮到子域的可能性,因此:。

  • mydomain.com被重定向到www.mydomain.com
  • abc.mydomain.com重定向到www.mydomain.com因爲它是 以上(由於目錄結構)

這是在所有可能的定義如何處理?

回答

1

在這裏,我爲我所有的虛擬主機做的事情:我使用的是Apache writemap

創建一個新的「partner.txt」與合作伙伴像這樣的文件:

0 www 
1 partner1 
2 partner2 
3 partner1 

然後編譯它,使用添加到您的RewriteRules找出前綴是否是合作伙伴或沒有,像這樣:

<VirtualHost *> 
    ServerAdmin [email protected] 
    DocumentRoot "/web/htdocs/olivier/mydomain.fr/dev/website" 
    ServerName mydomain.fr 
    ServerAlias *.mydomain.fr 
    ErrorLog "/web/logs/mydomain.error.log" 
    CustomLog "|/opt/httpd/bin/rotatelogs /web/logs/mydomain.fr/access_log.%Y-%m-%d-%H_%M_%S.log 5M" combined 
    ErrorDocument 404 /404.php 

    RewriteEngine On 
    # trying to hack = redirect: 
    RewriteRule (.*)setup.php http://disneyland.fr/ [NC,R,L] 
    RewriteRule (.*)admin(.*) http://disneyland.fr/ [NC,R,L] 

    # if your host doesn't begin with "www" add it and redirect: 
    RewriteCond %{HTTP_HOST} ^mydomain\.(fr|com|net|org|eu) [NC] 
    RewriteRule (.*) http://www.mydomain.%1$1 [QSA,R=301,L] 

    RewriteMap partners \ 
     dbm:/web/htdocs/olivier/mydomain.fr/rewriterules/partners.map 

    # test if known partner: 
    RewriteCond %{HTTP_HOST} (([a-zA-Z0-9\-]+)\.)mydomain.com$ 
    RewriteRule (.*) - [QSA,E=PARTNER:${templates:%1|notfound}] 

    # if partner not found or empty, 404: 
    RewriteCond %{ENV:PARTNER} ^$ [OR] 
    RewriteCond %{ENV:PARTNER} notfound 
    RewriteRule .* - [R=404,L] 
</VirtualHost> 
+1

這可能是解決方案(+1)的一部分,但它可能是您的解決方案太多而不是他的問題的解決方案。例如,他需要處理幾個不同的域。所以這可能需要進一步的解釋。例如,在匹配重寫中設置PARTNER env變量的效果如何? – regilero 2012-01-13 20:06:17

+0

嘿你是對的人我在我的答案中犯了一個錯誤,糾正了......然後解釋:在匹配重寫中設置PARTNER env變量的效果可以幫助你知道前綴是否有效。 I.E.如果你有夥伴1,夥伴2和夥伴3以及某人類型爲「partner47.mydomain.com」,那麼你就會知道夥伴47不是夥伴,因爲'夥伴'的默認值='notfound'=>最後一個重寫遊戲將執行404對於不知情的合作伙伴。儘管我們可以重定向到www.mydomain.com – 2012-01-13 22:13:37

相關問題