web-dev-qa-db-ja.com

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
2
widyakumara

このドキュメント によると、FQDNの複数の部分を使用できます。構成では、サブドメインに対応する%1を使用しています。 FQDNがimg.alpha.devの場合、%1imgになり、%2はドメインに対応するため、alpha%0になります。 img.alpha.devはFQDNに対応するため%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.htmlmkdir -p /var/www/alpha/img && echo test10 > /var/www/alpha/img/index.htmlhttp://alpha.dev/に移動すると、test5が返され、http://img.alpha.dev/に移動するとtest10が返されます。

5
030