2

カスタム 404 エラー ドキュメントにページをリダイレクトしようとしましたが、無駄でした。コードはこちら

header('HTTP/1.1 404 Not Found', true, 404); 

ただし、必要に応じてヘッダー情報が変更されても、同じページにとどまります

HTTP/1.1 404 Not Found
Date: Wed, 09 Jan 2013 18:10:44 GMT
Server: Apache/2.2.21 (Win32) mod_ssl/2.2.21 OpenSSL/1.0.0e PHP/5.3.8 mod_perl/2.0.4 Perl/v5.10.1
X-Powered-By: PHP/5.3.8

PHP ページは継続し、リダイレクトは達成されません!

4

4 に答える 4

2

あなたの見かけのファイル構造:

/
  .htaccess
  request.php
  ...
  errors/
    junk.php

.htaccess

ErrorDocument 404 /errors/junk.php

request.php

header('HTTP/1.1 404 Not Found', true, 404);
echo "Despite the 404 header this ~file~ actually exists as far as Apache is concerned.";
exit;

errors / junk.php

header('HTTP/1.1 404 Not Found', true, 404);
echo "The file you're looking for ~does not~ exist.";
echo "<pre>" . var_export($_SERVER, TRUE) . "</pre>";
exit;

http://yoursite.com/request.phpには次のように表示されます。

404ヘッダーにもかかわらず、この〜file〜は、Apacheに関する限り実際に存在します。

http://yoursite.com/filethatdoesntexist.phpには次のように表示されます。

探しているファイルは〜存在しません〜。

[カスタム404ハンドラーコードの記述に役立つ可能性のある$_SERVERのダンプ]

存在するファイルがあるが、それが404であるかのように見せたい場合は、次のようにPHPでリダイレクトを記述できます。

header('Location: http://mysite.com/errors/junk.php');
exit;

ブラウザを完全なURLにリダイレクトするか、単に次のようにします。

include('errors/junk.php');
exit;

これにより、ユーザーは同じページURLに残りますが、エラーコードが表示されます。

于 2013-01-09T18:40:22.787 に答える
2

header("Location: /errors/junk.php");PHP ではなくサーバー レベルで、基本的に Apache がカスタム エラー ドキュメントに対して行うことと同じように行う必要があります。Apache は 301 リダイレクトを使用していると思いますが、間違っている可能性があります。

于 2013-01-09T18:27:18.950 に答える
1

FastCGI を使用している場合は、404 応答ヘッダーを送信できません。

header('HTTP/1.1 404 Not Found', true, 404);

代わりに使用する必要があります

header('Status: 404 Not Found');

また、このheader('Status:...')命令は と組み合わせることはできませんheader('Location:...')。したがって、FastCGI の場合、次のコードは正しい 404 応答コードを返し、カスタム 404 ページにリダイレクトします。

header('Status: 404 Not Found');
echo file_get_contents('http://www.yoursite.com/errors/custom404.html');
exit;
于 2013-11-27T19:42:46.957 に答える
1

3xxエラーページにリダイレクトを使用しないでください。彼らがしているのは、検索エンジンを混乱させて、そのページが別の場所に存在すると考えさせることだけです。このアプローチを試すことができます:

header($_SERVER['SERVER_PROTOCOL'] . ' 404 Not Found');
require_once("errors/404.php");
die;

エラー ページを変更して、直接実行できるようにするか (たとえば、Apache が 404 エラー自体を処理する場合)、または (スクリプト内に) 含めることができるようにします。

オプションでない場合include_onceは、次のことができます。

header($_SERVER['SERVER_PROTOCOL'] . ' 404 Not Found');
echo file_get_contents("http://yoursite.com/errors/404.php");
die;

このアクションは、エンド ユーザーには表示されません。

于 2013-01-09T18:44:33.873 に答える