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

wid*_*ara 3 domain wildcard subdomain apache-2.2

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>
Run Code Online (Sandbox Code Playgroud)

目前处理请求如下:

alpha.dev   -> /Volumes/DATA/websites/alpha/www
beta.dev    -> /Volumes/DATA/websites/beta/www
Run Code Online (Sandbox Code Playgroud)

是否可以拥有通配符域子域?例如:

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
Run Code Online (Sandbox Code Playgroud)

030*_*030 6

根据此文档,可以使用 FQDN 的多个部分。在您的配置中,您使用的%1是对应的子域。如果FQDN是img.alpha.dev那么%1将会导致img%2对应于它导致域alpha%0img.alpha.dev作为%0对应于FQDN。

实现以下配置:

<VirtualHost *:80>
    ServerAlias *
    VirtualDocumentRoot /var/www/%2/%1
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

/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>  
Run Code Online (Sandbox Code Playgroud)

执行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>
Run Code Online (Sandbox Code Playgroud)

执行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>
Run Code Online (Sandbox Code Playgroud)

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/Returnstest5和导航到http://img.alpha.dev/Returns test10