Landscape トップページ | < 前の日 2004-09-04 2004-09-08 次の日 2004-09-10 >

Landscape - エンジニアのメモ 2004-09-08

ErrorDocument を利用した mod_rewrite の代替


* ErrorDocument を利用した mod_rewrite の代替

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [Apache]

http://example.com/00765 といったアドレスで CGI にアクセスさせたい。つまり、ドメインの後に5桁の文書番号を入力するだけで希望の文書を閲覧できる CGI を呼び出すようにしたい。CGI のパスは http://example.com/cgi-bin/read.cgi?id=00765 なのだが、ケータイ用の短縮アドレスなので URL は短くしたい。

- mod_rewrite を使えない環境なので ErrorDocument を使ってみる

Apache の mod_rewrite が使えれば楽勝なのだが、今回の案件では使えない。仕方がないので、ErrorDocument を利用したリダイレクト法を使うことにする。リダイレクトというよりパス変換と呼ぶ方が正確かな。300系の HTTP ステータスを発行するワケじゃないしね。

- ErrorDocument 法の利点

ErrorDocument 法の利点は、利用できる可能性が非常に高い点にある。ErrorDocument は Apache Core に入っているディレクティブであり、かつ多くのコンテキストで指定できる。.htaccess で指定できるのは使い勝手が良い。.htaccess はパフォーマンスを落とすって? 速いマシンを使えばいい。

core - Apache HTTP サーバ ErrorDocument ディレクティブ
http://httpd.apache.org/docs-2.1/ja/mod/core.html#errordocum ...
ErrorDocument ディレクティブ
説明: エラーが発生したときにサーバがクライアントに送るもの
構文: ErrorDocument error-code document
コンテキスト: サーバ設定ファイル, バーチャルホスト, ディレクトリ, .htaccess
上書き: FileInfo
ステータス: Core
モジュール: core

問題やエラーが発生したときの動作として、 Apache には以下の四つのうち一つの動作を設定することができます。

Apache 標準の簡単なエラーメッセージを表示
自分で指定したメッセージを表示
問題やエラーの処理をする為に、自サーバ内の URL-path へリダイレクト
問題やエラーの処理をする為に、外部の URL へリダイレクト
最初のものがデフォルトの動作で、2 番目から 4 番目は、 ErrorDocumentディレクティブにより、 HTTP のレスポンスコードと、メッセージか URL を指定することで設定します。 Apache が問題もしくはエラーに関する追加情報を提供することがあります。

- 設定方法

.htaccess に以下の記述を追加する。
<Files ~ "^[0-9]{5}$">
  ErrorDocument 404 /cgi-bin/read.cgi
</Files>

こうすると、http://example.com/00765 にアクセスされると /cgi-bin/read.cgi の中身を返すようになる。文書番号は環境変数 REDIRECT_URL や REQUEST_URI にセットされるので、リクエストされた文書番号も取得できる。正規表現を使っているので、Files と ~ を使うよりも FilesMatch を使う方が明示的でより良いかな。

- ErrorDocument を使ったリダイレクト (パス変換) の注意点

この方法を使う場合の注意点は2つ。

一つは、アクセスがあるたび Apache の error_log にエラーとして記録されてしまうこと。これは避けようがないので、ログのサイズ肥大に注意。httpd.conf でログを書かないようにすることはできるが、そもそも httpd.conf を修正できるなら .htaccess に ErrorDocument を書くなんてことをせずに、素直に mod_rewrite を使った方が良い。

二つめは、明示的に HTTP ステータスコードを上書きしないと404でステータスコードがが返ってしまうこと。この欠点があるため、リダイレクト先は CGI でないと使いにくいだろう。CGI ならば自分で 200 OK などのステータスコードを生成できるし、環境変数 REDIRECT_URL や REQUEST_URI にセットされた値に応じた処理を実装しやすいからだ。

参考
htmlでアクセスしたい
http://tdiary-users.sourceforge.jp/cgi-bin/wiki.cgi?html%A4% ...

- 2004-09-13 追記

2004-09-13 に、「Action を利用した mod_rewrite の代替」という記事を書いた。

すべての記事の見出し (全1029件)
全カテゴリの一覧と記事の数
カテゴリごとに記事をまとめ読みできます。記事の表題だけを見たい場合は、すべての記事の見出し (カテゴリ別表示) へ。

直近30日分の記事
2007-04-23 (Mon)
2007-03-07 (Wed)
2007-02-27 (Tue)
2007-01-17 (Wed)
2007-01-15 (Mon)
2007-01-14 (Sun)
2007-01-08 (Mon)
2006-12-01 (Fri)
2006-11-22 (Wed)
2006-11-20 (Mon)
2006-11-19 (Sun)
2006-09-30 (Sat)
2006-08-29 (Tue)
2006-08-04 (Fri)
2006-07-27 (Thu)
2006-07-23 (Sun)
2006-07-17 (Mon)
2006-07-10 (Mon)
2006-07-06 (Thu)
2006-07-03 (Mon)
2006-06-29 (Thu)
2006-06-28 (Wed)
2006-06-27 (Tue)
2006-06-25 (Sun)
2006-06-19 (Mon)
2006-06-18 (Sun)
2006-06-15 (Thu)
2006-06-11 (Sun)
2006-06-01 (Thu)
2006-05-30 (Tue)
プロファイル
斎藤 宏明。エンジニアです。宇都宮市に住んでいます。
リンク
RSS
スポンサードリンク
Powered by
さくらインターネット

© 斎藤 宏明 Saito Hiroaki Gmail Address
Landscape - エンジニアのメモ http://sonic64.com/
Landscape はランドスケープと読みます。
ひらがなだと らんどすけーぷ です。