2011-01-08 219 views
2

Helo! 我想爲將來使用mod_rewrite創建的所有子域準備一個動態虛擬主機。所有的子域名將以相同的方式配置,所以我想使用動態VH配置。 我希望每個子域的文檔根目錄都是/ home/user/public_html/subdomainName。動態配置的虛擬主機

我試着用下面的配置,但沒有成功:

<VirtualHost xxx.xxx.xxx.xxx:80> 
    # get the server name from the Host: header 
    UseCanonicalName Off 

    <Directory /home/user/public_html/> 
    # ExecCGI is needed here because we can't force 
    # CGI execution in the way that ScriptAlias does 
     Options FollowSymLinks ExecCGI 
    </Directory> 

    RewriteEngine On 

    # a ServerName derived from a Host: header may be any case at all 
    RewriteMap lowercase int:tolower 

    #rule that is suposed to set document root of virtual host!??? 
    RewriteRule ^([a-z-]+)\.domain\.com/?(.*) /home/user/public_html/$1/$2 

</VirtualHost> 

規則或somethinh似乎是錯的andit不適用。我從來沒有使用動態VH合作過,所以我不知道在哪裏我錯了......

+0

這個問題更適合serverfault.com – thkala 2011-01-08 18:09:37

回答

0

,而不是動態的虛擬主機,你也可以做到這一點使用通配符的DNS,這意味着配置{}任何.yourdomain.tld指向您的服務器。

這也會讓你爲每個域使用相同的文檔根目錄。

請注意,您需要添加ServerAlias *.yourdomain.tld到虛擬主機條目

+0

TNX,但如果可能的話我想要爲每個子域分開documentRoot。否則,我在子域中的應用程序無法正常工作(錯誤的路徑)。 – SimonM 2011-01-08 23:01:58

0

隨着重寫規則,你不能訪問該域名。也可以使用RewriteCond作爲該部分,並使用%1等進行反向引用。

RewriteCond %{HTTP_HOST} ^([a-z-]+)\.domain\.com$ [NC] 
RewriteRule (.*) %1/$1 

唯一的問題是,這將創建一個繼續循環前置子域名字符串。所以我通常做的是爲子域創建一個單獨的文件夾,如'子域'

RewriteRule ^subdomains - [L] 
RewriteCond %{HTTP_HOST} ^([a-z-]+)\.domain\.com$ [NC] 
RewriteRule (.*) subdomains/%1/$1 
+0

Tnx!我已經嘗試過,但之前被我的子域文件夾想法解決了。現在我想知道是否可以更改每個子域的DocumentRoot,以便它直接指向文件夾/子域/子域名?這是重寫VH解決方案,還是必須爲每個子域創建單獨的VirtualHost? – SimonM 2011-01-08 22:07:13