apacheのErrorDocumentについて

VirtualHost内で
ScriptAlias / /hoge/hoge
のようにしてスクリプトを実行しているのですが、
ErrorDocument 404 /notfound.html
とすると,404のときにexample.com/notfound.htmlにリダイレクトされてしまいます。

ErrorDocumentはスクリプトから配信するのではなくapacheのDocumentRootの/var/www/html/以下を開くようにしたいです。

ScriptAliasでDocumentRootが/になっているのが原因だと思うのですが、
この場合、ErrorDocumentはどのように記述すべきでしょうか?

回答の条件
  • 1人3回まで
  • 登録:
  • 終了:2011/12/05 18:20:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:rouge_2008 No.1

回答回数595ベストアンサー獲得回数351

ポイント50pt

ErrorDocumentはすべてまとめてerrorディレクトリに入れてはいかがでしょうか?
リダイレクトされずに(ブラウザのURL欄が変わらず)、エラーページとして指定した内容のページが表示されます。
設定は以下のようにします。

    ErrorDocument 404 /error/notfound.html

ErrorDocumentのHTMLファイルは「/var/www/html/error」内に入れます。


あるいは別の方法として、「ScriptAlias」ではなく「ScriptAliasMatch」を使用しても大丈夫です。
この場合の設定は以下のようにします。

    ScriptAliasMatch ^/(.*\.cgi) "/hoge/hoge/$1"

http://httpd.apache.org/docs/2.1/ja/mod/mod_alias.html#scriptaliasmatch


どちらでも好きな方法を試してみてください。

id:rouge_2008

「ScriptAliasMatch」を使う場合で、拡張子がcgi以外のファイルも対象の場合は、以下のようにファイル名と拡張子を分けて指定してみてください。

ScriptAliasMatch ^/([^/]*)\.(cgi|pl) "/hoge/hoge/$1.$2"
2011/11/29 21:27:11
id:y-kawaz No.2

回答回数1422ベストアンサー獲得回数226

ポイント50pt

ScriptAlias / の前に

Alias /notfound.html /var/www/html/notfound.html

もしくは

AliasMatch ^/(.*).html /var/www/html/$1.html

を設定しておく方法もありかなと思います。

id:rouge_2008

「AliasMatch」を使う場合は、以下のように直接対象のエラーページの名前を指定しないと、普通のHTMLページがループになってしまう可能性がありますね・・・

AliasMatch ^/(notfound|forbidden|servererror).html /var/www/html/$1.html

なるべく私が回答No.1で回答したどちらかの方法を使用するのがいいと思います。

2011/11/29 21:19:19
id:rouge_2008

すみません。上記コメントは間違いでした。
エイリアスの場合、ループにはならないんですね。
むしろ上記コメントの記述にした場合、エラーページ以外のHTMLが表示されなくなりました・・・
大変失礼しました。
※「Alias」による直接指定も同様の状態になりますので、Aliasによる指定は使用しない方が良さそうです。


なお、「AliasMatch」ですが、回答の記述では「http://example.jp/」や「http://example.jp/category/」等、ディレクトリへのアクセスの場合にページが表示されませんので、以下のようにする必要がありました。

AliasMatch ^/(|.*/|.*\.html)$ /var/www/html/$1



おそらく画像やCSS等もあると思いますので、その場合は以下のようにする必要があります。

AliasMatch ^/(|.*/|.*\.html|.*\.css|.*\.js|.*\.gif|.*\.png|.*\.jpg)$ /var/www/html/$1



スクリプトエイリアスを適用したくない種類のファイルが他にもある場合、上記にさらに追加しなければなりませんので、「ScriptAliasMatch」でCGIファイル等を指定する方が良いように思います。

※すみません。
「Alias」と「AliasMatch」に関する事ですので、こちらの回答にコメントしました。
(脱字を訂正してサイドコメントしています。)

2011/11/30 06:00:28

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません