SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 採用情報 ...
技術者募集中

【apache】VirtualDocumentRootで、ディレクトリを作るだけでサブドメインが作れる

問題

たくさんのサイトをVirtualHostで1台のサーバーで稼動させている。

Webサイト、サブドメインが増えるたびにDocumentRootを指定するのはとても面倒。httpd.confもどんどん見づらくなる。

いい方法ない?

答え

ルールに従ったディレクトリ構成にするなら、VirtualDocumentRootが便利。

DocumentRootを使うとこうなるところが、

<VirtualHost *:80>
    ServerName xxxxx.xxxx.xxx
    DocumentRoot "/home/apache/xxxxx.xxxx.xxx/htdocs"
</VirtualHost>
<VirtualHost *:80>
    ServerName yyyyy.xxxx.xxx
    DocumentRoot "/home/apache/yyyyy.xxxx.xxx/htdocs"
</VirtualHost>
<VirtualHost *:80>
    ServerName zzzzz.xxxx.xxx
    DocumentRoot "/home/apache/zzzzz.xxxx.xxx/htdocs"
</VirtualHost>

VirtualDocumentRootでまとめてこう書ける。

<VirtualHost *:80>
    ServerName xxxx.xxx
    ServerAlias *.xxxx.xxx
    VirtualDocumentRoot "/home/apache/%0/htdocs"
</VirtualHost>

zzzzz.yyyy.xxx にアクセスがあると、次のように展開される。

%0 → zzzzz.yyyy.xxx(全体)
%1 → zzzzz(最初の部分)
%2 → yyyy(2番目の部分)
%3 → xxx(3番目の部分)
%-1 → xxx(一番最後の部分)
%-2 → yyyy(最後から2番目の部分)
%2+ → yyyy.xxx(2番目以降の部分)
%-2+ → yyyy.xxx(最後から2番目以降の部分)

こんな感じで整理するのもいいかもです。

VirtualDocumentRoot "/home/apache/%2+/%1/htdocs"

注意

今まで使えていたRewriteが動かなくなるなどの影響が出ることがある。

RewriteBaseを指定していればたいてい問題ない。

関連するメモ

コメント