web-dev-qa-db-ja.com

ApacheErrorDocumentディレクティブが機能しない

400 BadRequestで機能するカスタムエラードキュメントを取得できません。 CentOSLAMPサーバーです。

ErrorDocument 400 /badrdoc.html

私は上記を使用してみました:

  1. Apache http.conf
  2. Apache httpd-vhosts.conf(各vhost内)
  3. サイトのルートhtdocsにある.htaccess

それらのどれも機能していません。 Apacheは、デフォルトの400 BadRequestページを提供しています。

誰かがこれに光を当てることができますか?

編集:言及するのを忘れました、私は変更後にApacheを再起動しました。

4
ServerBloke

カスタム400エラードキュメントを機能させるのにかなりの問題がありました。これをApacheconfのトップレベルに追加しました。

ErrorDocument 404 /404.html
ErrorDocument 400 /400.html

そして、DocumentRootに2つのエラードキュメントを作成しました。まず、404を次のようにテストしました。

echo -en "GET /foo HTTP/1.0\n\n" | nc 127.0.0.1 80

これは私のカスタム404を返しました。

次に、400(先頭のスラッシュが欠落していることに注意してください):

echo -en "GET foo HTTP/1.0\n\n" | nc 127.0.0.1 80

応答はデフォルトのApache400でした。

HTTPをHTTPS仮想ホストに話しかけることで、カスタム400を取り戻すことができました。

echo -en "GET / HTTP/1.0\n\n" | nc 127.0.0.1 443

無効なリクエストを行った場合でも、同じカスタム400が返されます。

echo -en "GET foo HTTP/1.0\n\n" | nc 127.0.0.1 443

テストでは残念ながら、SSLを非SSL仮想ホストと通信しても400は発生しません。カスタムErrorDocuemnt 400をポート80に送り返す方法がまだわかりません。

P.S.リクエストの形式が正しくない場合、正しいDocumentRootを判別することさえできない可能性があるため、ErrorDocument 400.htaccessファイル内で機能しないことをどこかで読んだことを覚えています。同じことがおそらく名前ベースの仮想ホストにも当てはまります。

5
Ladadadada