Apache HTTP サーバ バージョン 2.0
![](feather.gif)
Apache モジュール mod_alias
説明: | ホストファイルシステム上のいろいろな違う場所を ドキュメントツリーにマップする機能と、 URL のリダイレクトを行なう機能を提供する |
---|---|
ステータス: | Base |
モジュール識別子: | alias_module |
ソースファイル: | mod_alias.c |
概要
このモジュールのディレクティブはサーバにリクエストが到着したときに
URL の操作や制御をすることを可能にします。Alias
ディレクティブと ScriptAlias
ディレクティブは
URL とファイルシステムのパスをマップするために使用されます。これは
DocumentRoot
の下にないドキュメントをウェブのドキュメントツリーの一部として
送られるようにします。ScriptAlias
ディレクティブにはマップ先のディレクトリが CGI
スクリプトのみであることを示すという追加の効果があります。
Redirect
ディレクティブは
クライアントに違った
URL に新しいリクエストを送るように指示します。これは、
リソースが新しい場所に移動したときによく使用されます。
mod_alias
は簡単な URL 操作向けに設計されています。
より複雑な操作、クエリーストリングの操作には、mod_rewrite
で提供されるツールを使用してください。
処理の順番
様々なコンテキスト中での Alias や Redirect は他のディレクティブと
同じように標準の マージ規則 に
従って処理されます。ただし、(例えば <VirtualHost>
セクションの中のように) 複数の Alias や Redirect が
同じコンテキスト中に現れた場合は決まった順番で処理されます。
まず、Alias の前にすべての Redirect が処理されます。ですから、Redirect
か RedirectMatch
にマッチするリクエストには
Alias は決して適用されません。次に、Alias と Redirect が設定ファイル中の
順番に適用され、最初にマッチしたものが優先されます。
ですから、二つ以上のディレクティブが同じパスに適用されるときは、 すべてのディレクティブの効果を得るためにはより詳しいパスを先に書く 必要があります。例えば、次の設定は期待通りの動作をします:
Alias /foo/bar /baz
Alias /foo /gaq
しかし、上記の二つのディレクティブの順番が逆になると、
/foo
Alias
が
常に /foo/bar
Alias
より先にマッチしますので、後者は
決して適用されることはありません。
Alias ディレクティブ
説明: | URL をファイルシステムの位置にマップする |
---|---|
構文: | Alias URL-path
file-path|directory-path |
コンテキスト: | サーバ設定ファイル, バーチャルホスト |
ステータス: | Base |
モジュール: | mod_alias |
Alias
ディレクティブはドキュメントを
ローカルファイルシステムの
DocumentRoot
以外の場所に保管することを可能にします。
URL の (% が復号された) パスが url-path で始まるものは
directory-filename
で始まるローカルファイルにマップされます。
例
Alias /image /ftp/pub/image
http://myserver/image/foo.gif へのリクエストに対して、サーバは ファイル /ftp/pub/image/foo.gif を返します。
もし url-path の最後に /
を書いたなら、サーバがエイリアスを展開するためには、最後の /
が必要になることに注意してください。すなわち、Alias /icons/
/usr/local/apache/icons/
というものを使用している場合は、
/icons
という url はエイリアスされません。
エイリアスの行き先を含んでいる <Directory>
セクションを追加する必要があるかもしれないことに注意してください。
エイリアスの展開は <Directory>
セクションを調べる前に行なわれますので、
エイリアスの行き先の <Directory>
セクションのみ
効果があります。
(しかし、<Location>
セクションはエイリアスが処理される前に実行されますので、
こちらは適用されます。)
特に、Alias
を
DocumentRoot
ディレクトリの外側に配置した場合は、行き先のディレクトリに対する
アクセス権限を明示的に制限しなければならないでしょう。
例
Alias /image /ftp/pub/image
<Directory /ftp/pub/image>
Order allow,deny
Allow from all
</Directory>
AliasMatch ディレクティブ
説明: | 正規表現を使って URL をファイルシステムの位置にマップする |
---|---|
構文: | AliasMatch regex
file-path|directory-path |
コンテキスト: | サーバ設定ファイル, バーチャルホスト |
ステータス: | Base |
モジュール: | mod_alias |
このディレクティブは Alias
とほとんど同じですが、簡単な先頭からのマッチを行なうのではなく、
標準正規表現を利用します。ここで指定された正規表現と URL のパス
が合うかどうかを調べ、合う場合は括弧で括られたマッチを
与えられた文字列で置き換え、それをファイル名として使用します。たとえば、
/icons
ディレクトリを使う
ためには以下のようなものが使用できます:
AliasMatch ^/icons(.*) /usr/local/apache/icons$1
Redirect ディレクティブ
説明: | クライアントが違う URL を取得するように外部へのリダイレクトを 送る |
---|---|
構文: | Redirect [status] URL-path
URL |
コンテキスト: | サーバ設定ファイル, バーチャルホスト, ディレクトリ, .htaccess |
上書き: | FileInfo |
ステータス: | Base |
モジュール: | mod_alias |
Redirect ディレクティブは古い URL を新しいものへマップします。 新しい URL がクライアントに返されます。そして、 クライアントは新しいアドレスをもう一回取得しようとします。 URL-path (% が復号された) パスで始まるドキュメントへの すべてのリクエストは URL で始まる新しい (% が符号化された) URL へのリダイレクトエラーが返されます。
例
Redirect /service http://foo2.bar.com/service
クライアントは http://myserver/service/foo.txt へのリクエストを行なうと、代わりに http://foo2.bar.com/service/foo.txt をアクセスするように告げられます。
注意
設定ファイル中の順番に関わらず、
Redirect 系のディレクティブは Alias
ディレクティブと ScriptAlias ディレクティブよりも優先されます。
また、.htaccess ファイルや <Directory>
セクションの中で使われていたとしても、URL-path
は相対パスではなく、完全な URL でなければなりません。
もし status 引数が与えられていなければ、リダイレクトは "temporary" (HTTP ステータス 302) になります。これはクライアントに リソースが一時的に移動したということを示します。Status 引数は 他の HTTP のステータスコードを返すために使用することができます:
- permanent
- 永久にリダイレクトをするステータス (301) を返します。 これはリソースが永久に移動したということを意味します。
- temp
- 一時的なリダイレクトステータス (302) を返します。これがデフォルトです。
- seeother
- "See Other" ステータス (303) を返します。 これはリソースが他のもので置き換えられたことを意味します。
- gone
- "Gone" ステータス (410) を返します。これはリソースが永久に 削除されたことを意味します。このステータスが使用された場合、 url 引数は省略されなければなりません。
Status の値にステータスコードを数値で与えることで
他のステータスコードも返すことができます。ステータスが 300 と 399
の間にある場合、url 引数は存在していなければいけません。
その他の場合は省略されていなければなりません。ただし、
ステータスは Apache のコードが知っているものである必要があります
(http_protocol.c の関数 send_error_response
を見てください)。
例:
例
Redirect permanent /one http://example.com/two
Redirect 303 /three http://example.com/other
RedirectMatch ディレクティブ
説明: | 現在の URL への正規表現のマッチにより 外部へのリダイレクトを送る |
---|---|
構文: | RedirectMatch [status] regex
URL |
コンテキスト: | サーバ設定ファイル, バーチャルホスト, ディレクトリ, .htaccess |
上書き: | FileInfo |
ステータス: | Base |
モジュール: | mod_alias |
このディレクティブは Redirect
とほとんど同じですが、簡単な先頭からのマッチを行なうのではなく、
標準正規表現を利用します。ここで指定された正規表現と URL-path
が合うかどうかを調べ、合う場合は括弧で括られたマッチを
与えられた文字列で置き換え、それをファイル名として使用します。
たとえば、すべての GIF ファイルを別サーバの同様な名前の JPEG
ファイルにリダイレクトするには、以下のようなものを使います:
RedirectMatch (.*)\.gif$ http://www.anotherserver.com$1.jpg
RedirectPermanent ディレクティブ
説明: | クライアントが違う URL を取得するように外部への永久的な リダイレクトを送る |
---|---|
構文: | RedirectPermanent URL-path URL |
コンテキスト: | サーバ設定ファイル, バーチャルホスト, ディレクトリ, .htaccess |
上書き: | FileInfo |
ステータス: | Base |
モジュール: | mod_alias |
このディレクティブはクライアントに Redirect が永久的なもの
(ステータス 301) であることを知らせます。
Redirect premanent
とまったく同じです。
RedirectTemp ディレクティブ
説明: | クライアントが違う URL を取得するように外部への一時的な リダイレクトを送る |
---|---|
構文: | RedirectTemp URL-path URL |
コンテキスト: | サーバ設定ファイル, バーチャルホスト, ディレクトリ, .htaccess |
上書き: | FileInfo |
ステータス: | Base |
モジュール: | mod_alias |
このディレクティブはクライアントに Redirect
が一時的なものである (ステータス 302) ことを知らせます。
Redirect temp
とまったく同じです。
ScriptAlias ディレクティブ
説明: | URL をファイルシステムの位置へマップし、マップ先を CGI スクリプトに指定 |
---|---|
構文: | ScriptAlias URL-path
file-path|directory-path |
コンテキスト: | サーバ設定ファイル, バーチャルホスト |
ステータス: | Base |
モジュール: | mod_alias |
ScriptAlias
ディレクティブは、対象ディレクトリに
mod_cgi
の cgi-script
ハンドラで処理される CGI
スクリプトがあることを示す以外は
Alias
ディレクティブと同じ振る舞いをします。
URL の (% が復号された) パスが URL-path で始まるものは
ローカルのファイルシステムの
フルパスである二番目の引数にマップされます。
例
ScriptAlias /cgi-bin/ /web/cgi-bin/
http://myserver/cgi-bin/foo
へのリクエストに対してサーバはスクリプト
/web/cgi-bin/foo
を実行します。
ScriptAliasMatch ディレクティブ
説明: | URL を正規表現を使ってファイルシステムの位置へマップし、マップ先を CGI スクリプトに指定 |
---|---|
構文: | ScriptAliasMatch regex
file-path|directory-path |
コンテキスト: | サーバ設定ファイル, バーチャルホスト |
ステータス: | Base |
モジュール: | mod_alias |
このディレクティブは ScriptAlias
とほとんど同じですが、簡単な先頭からのマッチを行なうのではなく、
標準正規表現を利用します。ここで指定された正規表現と URL-path
が合うかどうかを調べ、合う場合は括弧で括られたマッチを
与えられた文字列で置き換え、それをファイル名として使用します。
たとえば、標準の /cgi-bin
を使用するようにするためには、以下のようなものを使います:
ScriptAliasMatch ^/cgi-bin(.*) /usr/local/apache/cgi-bin$1