質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.35%

  • CentOS

    3310questions

    CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

  • Apache

    2200questions

    Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Apacheで404エラーページが表示されない

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 12K+

qwe001

score 81

したこと

・ドキュメントルート直下の .htaccess に Errordocument 404 /errors/404.html と記述
・404.htmlのファイルサイズは512バイト以上あることを確認
・example.com/errors/404.html に直接アクセスし、ファイルが表示されることを確認
・/etc/httpd/conf/httpd.conf に Errordocument 404 /error/ と記述されていることを確認
・ディレクトリ名と.htaccessの記述を /error/404.html に変更して直接アクセスすると表示されないことを確認

以上のことをした上で、Apache標準のNot Foundメッセージが表示されます。
環境は CentOS 6.8, PHP 5.6.22, Laravel 5.3 です。

httpd.confは私の触ることができないファイル(他社提供サーバー)なので、.htaccessで404ページをコントロールしようと思ったのですが、うまくいかず。。
/errors や /hoge の中にファイルを入れたら問題なく表示されるのに、/error の中に入れると表示されなくなるのも謎です。
httpd.confで指定したディレクトリは特別な扱いになるということ…?

404ページを表示されたいのですがどうすれば良いでしょうか?

追記

参考までに、httpd.confと.htaccessの記述内容を下記します
なお、.htaccessの最後はちゃんと改行しています

/etc/httpd/conf/httpd.conf

<VirtualHost *:80>
    ServerName 192.168.1.1
    DocumentRoot /var/www/html
    <Directory /var/www/html>
        Options ExecCGI Includes FollowSymLinks
        AllowOverride Options AuthConfig Limit FileInfo
        Order allow,deny
        Allow from all
    </Directory>
    ErrorLog /var/www/logs/error_log
    CustomLog /var/www/logs/access_log combined env=!nolog
    ErrorDocument 404 /error/404.html
    RewriteEngine on
    RewriteOptions inherit
</VirtualHost>

/var/www/html/.htaccess

Options +Includes

AddHandler server-parsed html

AddType image/svg+xml .svg .svgz
AddEncoding gzip .svgz

ErrorDocument 404 error/404.html
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

check解決した方法

0

すいません自己解決(?)しました。
httpd.confを以下のように書き換えることでローカル環境で期待通りのページが表示されました。

ErrorDocument 404 /error/404.html

ErrorDocument 404 /errors/404.html

どうも.htaccessでErrorDocumentをどうこうするという記述がきいていなかったようです。
なぜ/error/だとダメなのかが謎なままですし、そもそも他社のサーバーなので実際にはhtaccessで404ページを表示するように依頼すべきなので、完全には解決してはいませんが、ひとまず原因はわかったのでよしとします。ありがとうございました

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/10/20 09:34

    こちら原因の特定が完了しましたので追記します。
    ・/error/がダメな理由
    httpd.confで/error/は/var/www/error/へのエイリアスがかかっていたためです。実際のプログラムは/var/www/html/にあり、ドキュメントルート外のフォルダだったために読み込まれませんでした
    ・.htaccessのErrorDocumentが効かなかった理由
    改行コードが違うことが原因でした。CentOS側に、WindowsからSSH経由でファイルを渡していたのですが、Windowsの改行コードがCR+LFでLinuxがLFなので、不要な改行文字が入っていたようです。
    ErrorDocumentは引数を2つ以上持ってはいけないので、
    ErrorDocument 404 /errors/index.html と書いてもサーバー側では
    ErrorDocument 404 /errors/index.html [CR] のように見えていて、引数の数が違うのでArgument Errorを発生させ、機能していなかったようです。
    結果として、httpd.conf側は何も変更すべき部分はなく、.htaccessでの変更で対応可能でした。もうvim勉強してSSH使うのやめよう。。ありがとうございました

    キャンセル

-1

タグにPHPがありますが関係ありますか?

PHPが関係するとしての回答です。
PHPで404を返しても Apacheの ErrorDocument で指定したエラーページは表示されません。
Apache既定のエラーページ表示になります。

<?php
header("HTTP/1.0 404 Not Found");
exit;

以下のようにエラーページのHTMLを読み込み返しましょう。

<?php
header("HTTP/1.0 404 Not Found");
echo get_file_contents('/var/www/html/errors/404.html');
exit;

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/10/19 16:57

    すいませんPHPは関係ありませんでした。PHPで明示的に404へリダイレクトさせる記述をしている等はありません。静的なHTMLで構成されており、存在しないURLにアクセスした際に、任意のディレクトリに置いたHTMLファイルを読み込んでほしく、.htaccessを触りましたが、全く反応なし。。httpd.confの内容を上書きできていないということでしょうか?

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.35%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • CentOS

    3310questions

    CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

  • Apache

    2200questions

    Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。