takafumi blog

日々の勉強メモ

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が入っていれば、そちらを使うかなといった感じかな…慣れの問題だけど。