使用Apache VirtualHost创建通配符子域

时间:2012-11-26 13:51:16

标签: apache virtualhost wildcard-subdomain

我想有这种情况:

  1. 如果用户请求使用此网址:example.comwww.example.com, 用户将在此目录index.php

  2. 中看到/home/admin1/public_html/
  3. 但是当用户请求使用其他子域(通配符)例如:freediscount.example.com时,用户将在此路径中看到index.php/home/admin1/public_html/userweb/freediscount.example.com

  4. 我托管上的技术支持建议我使用此方法: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>
    

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:9)

试试这个:

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>

虚拟主机的顺序&amp;他们的特殊性很重要。