2014-10-26 39 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