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

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

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

相关内容