15

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

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

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

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

4

6 に答える 6

32

現在のページにエラーページを含め、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(許可されていません)です。

于 2012-06-21T11:59:43.857 に答える
7

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

header('HTTP/1.0 404 Not Found');
die;
于 2012-06-21T11:59:12.847 に答える
4

私の経験では、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]
于 2015-05-29T07:18:24.760 に答える
1

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

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

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

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

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

于 2012-06-21T12:02:55.580 に答える
1

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

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

于 2013-12-30T20:51:40.090 に答える
0

これらはすべて、単一ページの404エラーにリダイレクトするための優れた回答です。これは、条件をテストし、サイト上の任意のスクリプトに リダイレクトできるようにするソリューションです。

.htaccess書き換えルールを使用してファイルを作成し[QSA,NC,L]、ページの場所とヘッダーのpost/get引数を維持するために使用します...

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,NC,L]

これにより、すべてのページがリダイレクトされ./index.phpます(すでにを使用している場合は、この名前を変更してくださいindex.php)。URLは変更されません。次に、でindex.php、いくつかの条件を確認し、合格した場合はスクリプトを示す変数を含め、そうでない場合はカスタム404を実行します。これは、...$_SERVERで例外処理を簡単に制御できることを意味します。index.php

$someNon404Condition = file_exists($_SERVER['PHP_SELF']);
if ($someNon404Condition) {
    include($_SERVER['PHP_SELF']);   // do the stuff
} else {
    print("404!  Why are you trying to access " . $_SERVER['PHP_SELF'] . "?");
}

これにより、他にもたくさんのことができます!静的な404.htmlページを忘れて、動的なページを使用して...

  • 条件はコーディングできる限り複雑になる可能性があります。認証を確認し、永続的なリダイレクトを確認します。コンテンツを自動的に期限切れにしたい場合は、等。
  • DBでを検索しexplode('/', $_SERVER['PHP_SELF'])、「多分これはあなたが探していたものですか?」というヘッダーの下にそれらの一致した結果のリストを表示します。
  • ユーザーレベルのイベントへの応答:ページが移動されたため、404ですか?次に、リダイレクトを処理します。モデレーターが削除してユーザーの投稿だったので404ですか?モデレーターが投稿を削除したことをユーザーに伝えます。等。
  • API呼び出し、動的コードなどを作成します。可能性はあります。
于 2020-10-05T13:50:56.880 に答える