如何在Apache2的VirtualDocumentRoot中configuration和组合通配符域和子域?

的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 

根据这个文件可以使用FQDN的多个部分。 在你的configuration中,你正在使用与子域对应的%1 。 如果FQDN是img.alpha.dev那么%1将导致img ,并且%2对应于它导致alpha的域,而%0对应于img.alpha.dev因为%0对应于FQDN。

实施以下configuration:

 <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