2012-11-26 113 views
14

我想有這樣的情況:創建通配符子域名使用Apache虛擬主機

  1. 如果使用該URL用戶請求:example.comwww.example.com, 用戶將看到index.php此目錄中/home/admin1/public_html/

  2. 但當用戶請求使用其他子域(通配符)時,例如:freediscount.example.com,用戶將在此路徑中看到index.php/home/admin1/public_html/userweb/freediscount.example.com

  3. 在我的主機

技術支持,建議我用這個方法:http://www.wiredstudios.com/php-programming/setting-up-wildcard-dns-for-subdomains-on-cpanel.html

基於該教程中,PHP有一個新的工作......對特定的文件夾重定向時與子域用戶的請求。我不喜歡這種方法。對我來說,如果Apache可以處理這個問題會更好。

幾乎接近我需要的是這種方法:Virtualhost For Wildcard Subdomain and Static Subdomain

,但是,我有VirtualHost設置,如何正確地創建VirtualHost對於這種情況有問題嗎?

這裏是我做了什麼,但沒有工作:

## I think this one is for www or without www, automatically generated with WHM 
<VirtualHost xx.xx.xx.xx:80> 
ServerName example.com 
ServerAlias www.example.com 
DocumentRoot /home/admin1/public_html 
</VirtualHost> 

## Here's what I'm trying to add 
<VirtualHost xx.xx.xx.xx:80> 
    ServerName example.com 
    DocumentRoot /home/admin1/public_html/userweb/* 
</VirtualHost> 

回答

14

通配符子域絕對可以使用Apache虛擬主機。

我基本上有相同的要求,並設法使它與Apache的mod_vhost_alias.so模塊一起工作。在http-vhosts.conf文件試試這個:

DocumentRoot "/home/admin1/public_html/userweb/" 
<Directory "/home/admin1/public_html/userweb/"> 
    Options None 
    AllowOverride None 
    Order allow,deny 
    Allow from all 
</Directory> 

<VirtualHost *:80> 
    DocumentRoot /home/admin1/public_html/ 
    ServerName www.example.com 
</VirtualHost> 

<VirtualHost *:80> 
    VirtualDocumentRoot /home/admin1/public_html/userweb/%1.example.com/ 
</VirtualHost> 

<VirtualHost *:80> 
    DocumentRoot /home/admin1/public_html/ 
    ServerName example.com 
</VirtualHost> 

請注意,我沒有測試過這一點,但它是非常接近爲我工作的解決方案。我的解決方案的

全部細節在這裏: http://www.calcatraz.com/blog/wildcard-subdomains-in-apache-1422

+0

截至今日爲止的鏈接。 – kontur

8

試試這個:虛擬主機&其特殊性事項

NameVirtualHost *:80 

<VirtualHost *:80> 
    DocumentRoot /home/admin1/public_html/ 
    ServerName www.example.com 
</VirtualHost> 

<VirtualHost *:80> 
    DocumentRoot /home/admin1/public_html/userweb/freediscount.example.com 
    ServerName other.example.com 
    ServerAlias *.example.com 
</VirtualHost> 

<VirtualHost *:80> 
    DocumentRoot /home/admin1/public_html/ 
    ServerName example.com 
</VirtualHost> 

訂單。

+0

freediscount.example.com僅僅是一個例子。在現實世界中,用戶可以鍵入他們創建的子域。例如:mystore.example.com >> /home/admin1/public_html/userweb/mystore.example.com –

+0

所以我不認爲通過使其靜態DocumentRoot將解決此問題。它是動態的。 –

+0

您無法制作通配符DocumentRoot。你需要通過.htaccess文件或通過php來做到這一點。這就是你可以用虛擬主機原樣做的事情。可能有apache mod來照顧你想要的東西。但事實是,我認爲是這樣。 –