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

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

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

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

9590閲覧

404エラーが表示されない

konoha0708

総合スコア36

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2019/03/25 07:18

ワードプレスで、現状無いurlを指定した場合、404エラーを出力したいと思い、404.phpを設置しましたが、どうしてもトップページが表示されてしまいます。
ワードプレスのバージョン:WordPress 5.1.1
ワードプレスはサブフォルダをかませてwp/の下にインストールされています。
※参考にしたサイト
リンク内容

■やったこと
・404.phpを作成し、ディレクトリの下に設置。

404.php

1<!-- 404.php --> 2<?php get_header(); ?> 3<div class="container"> 4<h2>Nothing to see here</h2> 5<p>We can't find this page / 404 error/</p> 6<p>You might mistake type this page URL : <span class="error_msg"> http://<?php echo esc_html($_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']); ?> </span></p> 7<p><a href="<?php echo home_url(); ?>">HOME</a></p> 8</div> 9<?php get_footer(); ?>

・.htaccessの最下段に下記の1行を追加

ErrorDocument 404 /index.php?error=404

この状態で、urlをたたくと、トップページが表示されてしまいます。
(404エラーのページを表示させたい)

ちなみに、
.htaccessにサブディレクトリのwp/をつけて
ErrorDocument 404 wp/index.php?error=404

404.phpをワードプレスのテーマ内のディレクトリ直下(header.phpなどがあるところ)に設置すると、正常に動作します。

「ドメインurl/404」と入力してもトップページが表示されてしまいます。

どのようにしたら、不正なurlを打った時に404エラーが表示させられますか?

ご教授いただきたく、よろしくお願いします。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2019/03/25 07:27

webサーバープログラムのaccess_logを点検して、URL書き換えが想定通り機能しているかを確認してください。たぶん「wp/index.php?error=404」へアクセスすることなく、それ以前にあるルールでトップページに飛ばされているんじゃないかと。
konoha0708

2019/03/25 13:01

レンタルサーバー上でaccess_logを見られるのでしょうか?やったことがなく、知識もなくすみません。 レンタルサーバーのサポートに確認してみます。
guest

回答2

0

ベストアンサー

お使いのテーマや設置状況がわかりませんが... 

index.php?error=404 を実行して、WordPress のトップページが表示されるということでしょうか?

404.php は、どこのディレクトリに設置されていますか?

WordPress的には、

404.phpをワードプレスのテーマ内のディレクトリ直下(header.phpなどがあるところ)に設置すると、正常に動作します。

が、(テーマが作成する独自) 404.php の正しい置き場所です。


WordPress で、index.php?error=404 が実行された場合に WordPress が404.php を探しに行く場所は、お使いのテーマのディレクトリ ( get_template_directory_uri() / 子テーマの場合は、 get_stylesheet_directory_uri() ) です。

つまり 404 のテンプレートとして、 WordPressインストールディレクトリ/wp-content/themes/お使いのテーマ/404.php を表示に使用します。

テーマファイルに 404.php が見つからない場合は、テーマの index.php を利用して表示します。

テンプレートファイルの選択順については、テンプレート階層 の概念図 の 404エラーページ部分を参照してください。

上記のようなテンプレート選択ルールがあるので、テーマの中に 404.php が見つからなかった場合は、テーマの index.php の内容によって表示されるので、テーマによって動作が変わります。

主なものだと

  • 検索画面や結果画面表示
  • index 画面を表示

があるようです。


追記。

ErrorDocument が効かなかった理由ですが、WordPress の .htaccess には、WordPress が処理するために下記の記述がありますので、存在しない URL も含めて、すべての URL の処理がこの部分で WordPress に引き渡されます。
Lフラグがついているので、この行より後に記載された RewriteRule は基本的に無視される形になります。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

投稿2019/03/26 02:56

編集2019/03/26 03:07
CHERRY

総合スコア25201

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

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

konoha0708

2019/03/27 04:09

わかりやすいご説明をいただき、ありがとうございます。 RewriteRule . /index.php [L]の後に、ErrorDocument 404 /index.php?error=404を記載していました。 重ねて質問させていただきますが、 RewriteRule . /index.php [L]の行を削除しても問題ないでしょうか? または、[L]を消して[]にすると、「ラスト」にはならないということになるのでしょうか?
konoha0708

2019/03/27 04:13

RewriteRule . /index.php [L]の一行を削除したら、正常に動作しました。
CHERRY

2019/03/27 04:24 編集

L フラグの有無で、ErrorDocument の設定は影響を受けません。 今回の問題点は、WordPress が、存在しない URL も含めて、全ての URL を補足するので、Webサーバーからみると存在しない URL でも 404 エラーはでないので、ErrorDocument が適用されないという話です。 WordPress が受け取った URL を分解して、データベース内の投稿や固定ページなどを検索した結果、見つからなかった場合に WordPress で、404 の処理になり、 WordPress が、 ` HTTP/1.1 404 Not Found ` のヘッダを出力して、テーマの 404.php を呼び出します。テーマに 404.php がない場合は、代わりに index.php を呼び出します。 > 404.phpをワードプレスのテーマ内のディレクトリ直下(header.phpなどがあるところ)に設置すると、正常に動作します。 ではダメな理由があるのでしょうか? > RewriteRule . /index.php [L]の一行を削除したら、正常に動作しました。 だと WordPress に URL が渡らなくなるので、WordPress が正常に動作しないと思いますが、動作していますか?
konoha0708

2019/03/27 04:48

通常のhtmlのサイトにワードプレスの投稿機能を追加した形で、 階層は、htmlのファイル群の中に「wp」のフォルダを作成し、その中にワードプレスをインストールしました。 .htaccessは、htmlの直下に配置し、RewriteRule . /index.php [L]の一行を削除したら、正常に動作しました。 404.htmlを作成し、 追記で、 ErrorDocument 404 https://****/error/404.htmlとしたところ、ワードプレスも含め、正常に動作しているようです。 はじめの404.phpから、いろいろやってみたのですが、現状このような形になりました。 記述が右往左往してしまい、すみません。
konoha0708

2019/03/27 06:30

RewriteRule . /index.php [L]の意味を教えていただいたことで解決に至りました。 大変丁寧に教えていただき、ありがとうございました。
guest

0

index.phpで$_GET["error"]を監視してheader("Location")で飛ばせばいいのでは?

そんなめんどくさいことせずに

ErrorDocument 404 /404.php

でもいいような気もしますが

投稿2019/03/25 07:37

yambejp

総合スコア115275

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

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

konoha0708

2019/03/25 13:06

回答ありがとうございます。 ご記載頂いた内容を知識がなく理解できておらずすみません。 ErrorDocument 404 /404.php を.htaccessに記載してみましたが状況変わらずです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.44%

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

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

質問する

関連した質問