httpd-vhosts.conf
<Directory "/Volumes/DATA/websites">
Options Indexes MultiViews FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
Require all granted
</Directory>
<Virtualhost *:80>
VirtualDocumentRoot "/Volumes/DATA/websites/default"
ServerName default.dev
UseCanonicalName Off
</Virtualhost>
<Virtualhost *:80>
VirtualDocumentRoot "/Volumes/DATA/websites/%1/www"
ServerAlias *.dev
UseCanonicalName Off
</Virtualhost>
当前请求处理如下:
alpha.dev -> /Volumes/DATA/websites/alpha/www
beta.dev -> /Volumes/DATA/websites/beta/www
是否有可能使用通配符域名和子域名?例如:
alpha.dev -> /Volumes/DATA/websites/alpha/www
img.alpha.dev -> /Volumes/DATA/websites/alpha/img
cdn.alpha.dev -> /Volumes/DATA/websites/alpha/cdn
beta.dev -> /Volumes/DATA/websites/beta/www
docs.beta.dev -> /Volumes/DATA/websites/beta/docs
blog.beta.dev -> /Volumes/DATA/websites/beta/blog
答案1
根据本文档可以使用 FQDN 的多个部分。在您的配置中,您使用的%1
是对应于子域的。如果 FQDN 是img.alpha.dev
,%1
则会导致img
与%2
它对应的域,alpha
并且%0
与对应于 FQDN 的域img.alpha.dev
相对应。%0
实施以下配置:
<VirtualHost *:80>
ServerAlias *
VirtualDocumentRoot /var/www/%2/%1
</VirtualHost>
/etc/httpd/conf/httpd.conf
,执行,mkdir -p /var/www/mydomain/info && echo helloworld > /var/www/mydomain/info/index.html
重新启动httpd
并导航至http://info.mydomain.com/
结果helloworld
。
但是如果指定了更多 ServerAlias,例如:
<VirtualHost *:80>
ServerAlias *.mydomain.com
VirtualDocumentRoot /var/www/%1
</VirtualHost>
执行mkdir -p /var/www/info && echo test2_param_one > /var/www/info/index.html
并导航至info.mydomain.com
结果test2_param_one
。
<VirtualHost *:80>
ServerAlias *.mydomain.com
VirtualDocumentRoot /var/www/%0
</VirtualHost>
执行mkdir -p /var/www/info.mydomain.com && echo test2_param_all > /var/www/info.mydomain.com/index.html
并导航至info.mydomain.com
结果test2_param_all
。
综上所述,以下代码片段有效:
<VirtualHost *:80>
ServerAlias *.*.dev
VirtualDocumentRoot /var/www/%2/%1
</VirtualHost>
<VirtualHost *:80>
ServerAlias *.dev
VirtualDocumentRoot /var/www/%1/test
</VirtualHost>
mkdir -p /var/www/alpha/test && echo test5 > /var/www/alpha/test/index.html
,,mkdir -p /var/www/alpha/img && echo test10 > /var/www/alpha/img/index.html
导航至http://alpha.dev/
返回test5
和导航至http://img.alpha.dev/
返回test10
。