web-dev-qa-db-ja.com

PHP-別のページにリダイレクトせずに404エラーを表示する

ユーザーが存在するページに到達したが、ユーザーに見せたくない場合に404​​エラーを表示したい。

次のようにリダイレクト(アドレスバーにエラーページのリンクがアドレスバーに表示される)を実行したくありません。

if ($this_page_should_not_be_seen)
   header("Location: err.php?e=404");

代わりに、ブラウザのアドレスのURLを変更しない限り、ページは実際には存在しないように見えるはずです。

13
Dilip Raj Baral

現在のページにエラーページを含め、404エラーステータスコードを送信します。

<?php
if ($nobody_should_ever_be_here) {
  header('HTTP/1.1 404 Not Found'); //This may be put inside err.php instead
  $_GET['e'] = 404; //Set the variable for the error code (you cannot have a
                    // querystring in an include directive).
  include 'err.php';
  exit; //Do not do any more work in this script.
}
?>

ページが表示されない場合は、これを使用する必要があることに注意してください。許可されていないアクセスのより適切なステータスコード(ログインしているユーザーにページが表示される場合)は403(許可されていません)です。

27
Emil Vikström

プログラムで404(または実際には他のHTTP応答コード)を実現できます

header('HTTP/1.0 404 Not Found');
die;
5
Jon

私の経験では、URLを変更せずに404エラードキュメントを表示する最良の方法は、apaches .htaccessファイルでエラードキュメントを定義することです。

RewriteEngine on
RewriteBase /

# Defines 404 error pages content:
ErrorDocument 404 /my_root/errors/404.html

# for all invalid links (non existing files):
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* - [L,R=404]

# for some valid links (existing files to be un-accessible):
RewriteCond %{THE_REQUEST} ^.*some_file.php.*$ [NC]
RewriteRule .* - [L,R=404]
3

あなたが書いたものは私たちが理解するのを難しくします。

着信ユーザーが到達したくないページに到達した場合、着信ユーザーを404エラーページにリダイレクトしたいと思います。

それで、人は存在するページに到達しますか?

たとえば、保護されたページに到達した場合、その人は見ることができません。ヘッダーを使用するのが最善の方法です。オプションはmeta-refreshまたはjavascriptをエコーすることですが、ヘッダーははるかにクリーンです。 Webでかなり一般的なYou do not have permission to do that!のようなものを表示できます。リダイレクトしたくない場合は、ヘッダーを介して404「偽のメッセージ」を表示できます。

誰かが404ページ、存在しないファイルに到達することについて話している場合、唯一のオプションは.htaccessを使用することです

1
OptimusCrime

次のように404ページに移動できますか

header( 'Location: http://www.website.com/errors/404.php ');

1
Sendy