4

PHPページからHTTPエラードキュメントを表示しようとしていますが、検索エンジンのクローラーが混乱するのを防ぎ、一時的な問題が発生した場合にページを再読み込みできるように、元のURLをアドレスバーに残したいと思います。

PHPでリダイレクト関数を作成しました。これは次のようになります。

public static function Redirect($url, $code = '303 See Other') {
    header('HTTP/1.1 ' . $code);
    header('Location: ' . $url);
    exit(0);
}

403 Forbiddenなどのエラードキュメントを表示したい場合は、次のようにしますRedirection::Redirect('/errordocs/403.php', '403 Forbidden');。これで問題なく動作します。

私が言ったように、ユーザーのURLは/errordocs/403.php私が避けたいと思うように変更されます。

私がやろうとしたのはheader('Location: ' . $url);、HTTPコードが4xxまたは5xxの場合にその行を削除することでした。関連するエラーページを指すように.htaccessを設定しているので、これによってApacheが正しいドキュメントを表示するようになることを期待していました(これはそのままで正常に機能します)。

私が実際にこれを行うことで得たのは、私のかなりカスタムなエラードキュメントではなく、問題が発生したときの標準のGoogleChromeメッセージでした。

簡単なコンセンサスで、これを今行うための最良の方法は何ですか?リダイレクトする代わりにページをエコーさせる?

4

2 に答える 2

2

私は同じことをしましたが、それは404であるため、見つかりませんでした。私の意見では、なくなっています...

したがって、.htaccessファイルを次のように設定します。

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) - [G]
ErrorDocument 410 /error404.php

これで、誰かが404をヒットすると、きれいな404ページが表示されますが、現在のURLに留まります。

注:.htacesssファイルの実際の例は次のとおりです: http ://www.smdailyjournal.com/stackoverflow

そして、ヘッダーコードのチェックに行くと、真の410-Goneメッセージが返されることがわかります:)

于 2012-12-22T22:05:17.037 に答える
1

4xxステータスコードの場合は、エラーhtmlの内容を表示するだけです。それ以外の場合はリダイレクトします。

public static function Redirect($url, $code = '303 See Other') {
    header('HTTP/1.1 ' . $code);
    if(strpos($code, '4') === FALSE) {
        header('Location: ' . $url);
    } else {
        include(get_error_page_file_name($code));
    }
    exit(0);

}

上記の例では、適切なHTTPステータスコードが送信され、エラーページの内容が表示され、アドレスのURLが同じに保たれます。

于 2012-12-22T22:05:08.393 に答える