サブドメインをディレクトリっぽく
DocmentRootがずれてると何も出来ない僕です。
そのための設定するためだけnamedのファイルを開いたり、rndc reloadやったりするのはもうこりごりなのです。ちょっと調べてみたら、あっという間に出来ちゃう事がわかったので対応してみました。仮サイトで使うのでbasic認証もおまけでついてます。安心ですね!
##今回設定した条件を書いておきますね。
- URLは、http://VERSION.PROJECT.DOMAIN.JP/
(バージョン・プロジェクト名・自分のドメイン)という順番にします。 - ファイルの実体があるディレクトリ構成は、/home/www/project/version/public/を想定しています。
- basic認証のパスワードは共通する場所(/home/www/.htpasswd)
##順にやってみると動くはずです!
素のApacheは何も設定されてないのかという感じでしたので、一応書いておきます。a2enmodというコマンドでモジュールをアクティブに出来たので、ホント簡単でした。
###1.mod_rewrite追加
「戻りライト」と聞き間違えないようにするためにも追加しておきます。
sudo a2enmod rewrite
###2.vhost_aliasを追加(a2enmodで出来るかも?)
VirtualDocumentRootを使うためにはこの設定がミソっぽいです。
sudo ln -s /etc/apache2/mods-available/vhost_alias.load /etc/apache2/mods-enabled
###3.password認証の設定
一応、仮環境なので、パスワード認証もつけます。Googleさんが見に来ないためにも大切なとこですね。
sudo a2enmod authz_groupfile
vi /home/www/.htpasswd
###4.confファイル編集
あとは設定ファイルをいじるだけです。
sudo vi /etc/apache2/sites-available/000-default.conf
中身を下記のようにします。パスワード制限が不要であれば、タグ内は不要なのでもっと簡単ですー(DOMAIN.JPはみなさんのドメインに)
<VirtualHost *:80>
ServerName web.DOMAIN.JP
ServerAlias web.DOMAIN.JP *.DOMAIN.JP
VirtualDocumentRoot /home/www/%2/%1/public
RewriteEngine on
RewriteMap lowercase int:tolower
RewriteRule ^/server-status - [L]
RewriteRule ^/icons/ - [L]
RewriteCond %{HTTP_HOST} ^(.+)\.(DOMAIN.JP)(:(80|443))?$
RewriteCond /home/www/%2/ -d
RewriteRule ^/(.*)$ /home/www/%2/%1/public/$1
<Directory /home/www/*/*/public>
AuthUserFile /home/www/.htpasswd
AuthGroupFile /dev/null
AuthName "Secret Area"
AuthType Basic
require valid-user
<Files ~ "^.(htpasswd|htaccess)$">
deny from all
</Files>
</Directory>
</VirtualHost>
###5.再起動
サーバを再起動します。今回はreloadでやってしまいますね。
(configtestからのreloadの方がオススメです)
sudo service apache2 reload
これでイロイロな面倒から解放されるはずです!僕はすごく解放されましたー
Gruntでrsync走らせて、HubotでSlackに通知するとかまでやったのですが、そちらはまた書きます。
MarkDown記法でグレーで括るやり方がわかって楽しくなってきました。
皆さん、快適な開発環境になって、いいモノを作っていきましょう!