apache mod_aliasメモ
環境 CentOS 7.0 apache2.4.6
mod_aliasは使った事がなかったので、今更だけど調べてみた。
主に使いそうなのは
違いはAliasMatchが正規表現を使えるところだけで、他は同じ模様。
という事は基本的にAliasMatchを使えばいいのかな?
速度面の違いとかが存在するかもしれないが。
構文
Alias URL-path file-path|directory-path
Alias ディレクティブはドキュメントを ローカルファイルシステムの DocumentRoot 以外の場所に保管することを可能にします。 URL の (% が復号された) パスが url-path で始まるものは directory-filename で始まるローカルファイルにマップされます。
という事なので、
- 同じドメインだけど、パスごとに全く別のシステムを割り当てる
- 特定のファイル(画像など)をDocumentRootの外におく
といった時に使えそう。
例えば、以下のような構成がある。
$ tree -d . . ├── documentroot │ └── public │ └── foo └── extrasystem └── public
そして
というパスに対して、それぞれ
- /hoge -> documentroot/public
- /fuga -> extrasystem/public
- /piyo -> documentroot/public
- /hoge/foo -> documentroot/public/foo
と割り当てるとき
Alias ^/fuga /extrasystem/public # (1) Alias ^/hoge/foo /documentroot/public/foo # (2) Alias ^/hoge /documentroot/public # (3) AliasMatch ^/.* /documentroot/public # (4)
となる。
(3),(4)は、(4)で統一できるが、(2),(3)の順番を意識するためにあえて別に書いた。
基本的に先の行でマッチすると、それ以降の判定は行われないため、(2),(3)のように書くときは順番に注意が必要。
順番を気にせず、以下のように書くこともできる。
AliasMatch ^/hoge(/.*) /documentroot/public$1
気を付けたいのは以下の点。 ドキュメントの表現をそのまま借りる。
特に、Alias を DocumentRoot ディレクトリの外側に配置した場合は、 行き先のディレクトリに対する アクセス権限を明示的に制限しなければならないでしょう。
というところ。
先ほどの例だと
Alias /fuga /extrasystem <Directory /extrasystem> Order allow,deny Allow from all </Directory>
といった設定わすれが無いようにする必要がある。
RedirectMatch系は簡単なリダイレクトなら使うかもしれないが、
mod_rewriteが入っていれば、そちらを使うかなといった感じかな…慣れの問題だけど。