事の発端
CakePHPの環境を作るたびにApacheのVirtualHost設定するのが面倒なので、サブドメインでアクセスできるようにApacheの設定を行おう!
*.hoge.example.comでバーチャルホストを切れるように設定する
環境
- Apache2.2
- VirtualDocumentRootを使うのでmod_vhost_aliasが必須
DNSレコード設定
Aレコードに*.hoge.example.comがWebサーバに向くように設定する。
Apacheの設定
Apacheの設定ファイルにVirtualHostの設定を追加する。
<VirtualHost *:80>
ServerName hoge.example.com
ServerAlias *.hoge.example.com
VirtualDocumentRoot /var/www/hoge.example.com/%1
CustomLog logs/hoge.example.com_access_log combined
ErrorLog logs/hoge.example.com_error_log
# 必要に応じて追加
<Directory "/var/www/hoge.example.com/%1">
AllowOverride All
Options FollowSymlinks
</Directory>
</VirtualHost>
Apacheを再起動して設定を反映させる。
% sudo apachectl configtest
Syntax OK
% sudo apachectl restart
これで以下の通りにマッピングされる。
ホスト名 | ディレクトリ |
---|---|
fuga.hoge.example.com | /var/www/hoge.example.com/fuga |
piyo.hoge.example.com | /var/www/hoge.example.com/piyo |
その他捕捉
CakePHP3を実行しようとしたところそのままだとリダイレクトループに陥ってしまうので、.htaccessにRewriteBaseを追記する。
CAKE/.htaccess
<IfModule mod_rewrite.c>
RewriteEngine on
+ RewriteBase /
RewriteRule ^$ webroot/ [L]
RewriteRule (.*) webroot/$1 [L]
</IfModule>
CAKE/webroot/.htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
+ RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>