2014-10-26 35 views
2
与Apache虚拟主机的通配符域

我目前正在运行的几个领域为地方发展兼容Mac

http://wordpress.dev 
http://phpmyadmin.dev 
http://projectx.dev 
http://projecty.dev 
... 

这些项目大部分都位于用户的“网站”目录,但一些位于其他地方:

/Users/[username]/Sites/wordpress 
/Users/[username]/Sites/phpmyadmin 
/Users/[username]/Sites/projectx 
/Users/[username]/OtherDirectory/projecty 

我目前的设置都通过添加条目奉献给/etc/hosts/etc/apache2/extra/httpd-vhosts.conf

/etc/hosts文件:

127.0.0.1  localhost 
255.255.255.255 broadcasthost 
::1    localhost 
fe80::1%lo0  localhost 
# Virtuelle Hosts 
127.0.0.1  wordpress.dev 
127.0.0.1  phpmyadmin.dev 
127.0.0.1  projectx.dev 
.... 

/etc/apache2/extra/httpd-vhosts.conf:

<VirtualHost *:80> 
    ServerName [PROJECT].dev 
    ServerAlias [PROJECT].dev 
    DocumentRoot /Users/[username]/Sites/[PROJECT]/ 
    <Directory /Users/[username]/Sites/[PROJECT]/> 
     Options Indexes FollowSymLinks MultiViews 
     AllowOverride All 
     Order allow,deny 
     allow from all 
    </Directory> 
</VirtualHost> 
<VirtualHost *:80> 
... 

是否有使用某种通配符设置映射方式域到某个目录像

http://foo.dev => /Users/[username]/Sites/foo 
http://bar.dev => /Users/[username]/Sites/bar 
... 

,同时保持projecty工作(当然,一些额外的设置),所以我只需要创建在Sites一个文件夹是通过http://[foldername].dev

[username]即时访问,可以只要你有没有虚拟主机追赶foo.devServerName或硬编码

回答

2

使用mod_vhost_aliasVirtualDocumentRoot

ServerAlias你应该能够要做到以下几点:

<VirtualHost *:80> 
    ServerName default.dev 

    VirtualDocumentRoot /Users/youruser/%-2 
    ... 
    ... 
</VirtualHost> 

你需要usern虽然你说这不是问题,但是我可以硬编码。

%-2VirtualDocumentRoot表示foo.com的倒数第二个点分离部分,即foo。然后,您可以有目录,你希望地图网站:

http://foo.dev => /Users/youruser/Sites/foo 
http://bar.dev => /Users/youruser/Sites/bar 
http://subdom.baz.dev => /Users/youruser/Sites/baz 

你需要确保你想以这种方式来映射任何其他域在你的主机上适当的入口文件,或DNS如果你使用的话。

+0

你能给我一个完整的例子。这不起作用:http:// pastebin。com/AMM895bu – Xaver 2014-10-29 17:33:42

+0

删除'ServerAlias',如果你在'vhosts.conf'的其他任何地方有''foo.dev'的'ServerName',你需要删除它。您需要将此配置作为默认主机才能工作。 – arco444 2014-10-29 17:44:46

+0

不起作用:(我有'mod_vhost_alias'加载,我没有foo.dev VirtualHost定义,我在'etc/hosts'文件中有'127.0.0.1 default.dev',我有一个名为Sites “foo”有一个index.html文件,有什么缺失的? – Xaver 2014-10-29 17:51:12

0

为了实现您的需要,您可以配置一个动态配置的群发虚拟主机。

要拥有它,你应该增加类似下面你httpd.conf文件的东西:

# get the server name from the Host: header 
UseCanonicalName Off 

# this log format can be split per-virtual-host based on the first field 
LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon 
CustomLog logs/access_log vcommon 

# include the server name in the filenames used to satisfy requests 
VirtualDocumentRoot /www/hosts/%0/docs 
VirtualScriptAlias /www/hosts/%0/cgi-bin 

这将做同样为以下:

NameVirtualHost 111.22.33.44 
<VirtualHost 111.22.33.44> 
    ServerName www.customer-1.com 
    DocumentRoot /www/hosts/www.customer-1.com/docs 
    ScriptAlias /cgi-bin/ /www/hosts/www.customer-1.com/cgi-bin 
</VirtualHost> 
<VirtualHost 111.22.33.44> 
    ServerName www.customer-2.com 
    DocumentRoot /www/hosts/www.customer-2.com/docs 
    ScriptAlias /cgi-bin/ /www/hosts/www.customer-2.com/cgi-bin 
</VirtualHost> 
# blah blah blah 
<VirtualHost 111.22.33.44> 
    ServerName www.customer-N.com 
    DocumentRoot /www/hosts/www.customer-N.com/docs 
    ScriptAlias /cgi-bin/ /www/hosts/www.customer-N.com/cgi-bin 
</VirtualHost> 

有关此更多详情,请here