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

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

新規登録して質問してみよう
ただいま回答率
85.48%
CentOS

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

Apache

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

Q&A

解決済

2回答

30807閲覧

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

qwe001

総合スコア133

CentOS

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

Apache

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

0グッド

0クリップ

投稿2016/10/19 07:33

編集2016/10/19 08:02

したこと

・ドキュメントルート直下の .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

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

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

ErrorDocument 404 /error/404.html

ErrorDocument 404 /errors/404.html

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

投稿2016/10/19 08:23

qwe001

総合スコア133

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

qwe001

2016/10/20 00: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使うのやめよう。。ありがとうございました
guest

0

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

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

PHP

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

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

PHP

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

投稿2016/10/19 07:49

Y.H.

総合スコア7914

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

qwe001

2016/10/19 07:57

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問