if (strstr($_SERVER['REQUEST_URI'],'index.php')) {
header('HTTP/1.0 404 Not Found');
}
なぜこれがうまくいかないのですか?空白のページが表示されます。
if (strstr($_SERVER['REQUEST_URI'],'index.php')) {
header('HTTP/1.0 404 Not Found');
}
なぜこれがうまくいかないのですか?空白のページが表示されます。
あなたのコードは技術的に正しいです。その空白ページのヘッダーを見ると、404 ヘッダーが表示され、他のコンピューター/プログラムは応答をファイルが見つからないこととして正しく識別できます。
もちろん、ユーザーはまだ SOL です。通常、404 は Web サーバーによって処理されます。
問題は、Web サーバーが PHP ページの処理を開始すると、404 を処理するポイントをすでに通過していることです。
404 ヘッダーの提供に加えて、PHP は実際の 404 ページの出力を担当するようになりました。
記録のために、これはすべての場合のハンドラーです。
<?php
header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found");
header("Status: 404 Not Found");
$_SERVER['REDIRECT_STATUS'] = 404;
?> <!-- 404 contents below this line -->
デフォルトのサーバー 404 ページをロードします (たとえば、Apache 用に定義されている場合)。
if(strstr($_SERVER['REQUEST_URI'],'index.php')){
header('HTTP/1.0 404 Not Found');
readfile('404missing.html');
exit();
}
PHP 5.4以降、できるようになりましたhttp_response_code(404);
@Kitet に基づく別のソリューション。
header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found");
header("Status: 404 Not Found");
$_SERVER['REDIRECT_STATUS'] = 404;
//If you don't know which web page is in use, use any page that doesn't exists
$handle = curl_init('http://'. $_SERVER["HTTP_HOST"] .'/404missing.html');
curl_exec($handle);
制御できないサーバーでホストされている Web サイトをプログラミングしている場合、どのファイルが「404missing.html」であるかはわかりません。ただし、これを行うことはできます。
このようにして、同じサーバー上で通常の 404 ページとまったく同じ結果を提供しました。オブザーバーは、404 を返す既存の PHP ページと存在しないページを区別できません。
少し短いバージョン。奇数エコーを抑えます。
if (strstr($_SERVER['REQUEST_URI'],'index.php')){
header('HTTP/1.0 404 Not Found');
exit("<h1>404 Not Found</h1>\nThe page that you have requested could not be found.");
}
if($_SERVER['PHP_SELF'] == '/index.php'){
header('HTTP/1.0 404 Not Found');
echo "<h1>404 Not Found</h1>";
echo "The page that you have requested could not be found.";
die;
}
echo ステートメントを単純化したり、上記のようにセミコロンを忘れたりしないでください。また、ページで substr を実行する理由として、php_self を簡単に実行できます。
あなたはそれを正しくやっていますが、それはいくらかの洗練を使用することができます. それは対処されているように見えるので、実用的なアプリケーションの利点について話しましょう:
多言語のテクニカル ドキュメントの膨大なコレクションがある私たちの古い Web サイトでは、if else 条件内でこれを実行していました。
if (<no file found>){
die("NO FILE HERE");
}
問題 (役に立たないメッセージと悪いユーザー エクスペリエンスに加えて) は、通常、リンク クローラー (この場合は整合性) を使用して、不適切なリンクや不足しているドキュメントをチェックすることです。これは、そこにファイルがあることを示す完全に正しい 200 no error 応答を取得していたことを意味します。Integrity は、PDF が必要であることを認識していなかったため、php で 404 ヘッダーを手動で追加する必要がありました。ダイの上にコードを追加することにより (その後は何も実行されず、ヘッダーは常にレンダリングされた html の前にある必要があるため)、完全性 (多かれ少なかれブラウザーのように動作します) は 404 を返し、行方不明を探す場所を正確に知ることができます。ファイル。エラーがあることをユーザーに伝えるもっと洗練された方法があります。
header('HTTP/1.0 404 Not Found');
die("NO FILE HERE");
これを試して:
if (strstr($_SERVER['REQUEST_URI'],'index.php')) {
header('HTTP/1.0 404 Not Found');
echo "<head><title>404 Not Found</title></head>";
echo "<h1>Not Found</h1>";
$uri = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
echo "<p>The requested URL ".$uri." was not found on this server.</p>";
exit();
}
ご存知のように、私のウェブサイトでは次のようなものを作成しました。
$uri=$_SERVER['REQUEST_URI'];
$strpos=strpos($uri, '.php');
if ($strpos!==false){
$e404="The page requested by you: "".$_SERVER['REQUEST_URI']."", doesn't exists on this server.";
$maybe=str_replace('.php','',$uri);
$maybe=str_replace('/','',$maybe);
die("<center><h1>404</h1><hr><h3>$e404</h3><h3>Maybe try <a href=$maybe>www.leaveyortexthere.p.ht/$maybe</a>?</center>");
}
お役に立てば幸いです。
私はこの問題に遭遇しました..サーバー上の存在しないリンクにリダイレクトするとうまくいくと思います! サーバーは彼の 404 を返すため:
header('Redirect abbb.404.nonexist');
< 確かに存在しません
サーバーのデフォルトの 404 ページを表示したい場合は、次のようにフレームにロードできます。
echo '<iframe src="/something-bogus" width="100%" height="100%" frameBorder="0" border="0" scrolling="no"></iframe>';