少し前に、すべてのブラウザーが動作を変更し、301 リダイレクトのキャッシュを開始しました。php にキャッシュされていない 301 リダイレクトを行う方法を知りたいですか?
2 に答える
301は永続的なリダイレクトであるため、キャッシュは理にかなっています。リダイレクトが永続的でない場合は、307 (一時的なリダイレクト)、302 (見つかった)、または303 (その他を参照) を使用します。
適切な使用例については、こちらを参照してください。
これら 3 つの違いを詳しく説明するには、次のようにします。
- 307は、リソースが移動されたときの一般的な一時的なリダイレクトです。たとえば、次のような URL は
domain.com/news/latest
、最新のニュース記事への 307 リダイレクトを行う可能性がありますdomain.com/news/article-594873
。この一時的なリダイレクトはしばらく続く可能性があるため (その特定の記事は数時間最新のものである可能性があります)、ブラウザーはリダイレクトをキャッシュする可能性があります。その程度を制御するには、キャッシュ制御ヘッダーを使用します。 - 303は、キャッシュしてはならないリダイレクトです。たとえば、 に新しい記事を POST すると、
domain.com/news
新しいニュース記事が作成され、その記事への 303 リダイレクトが に提供されdomain.com/news/article-978523
ます。別のPOST リクエストにより、まったく別の新しい記事が作成されるため、キャッシュできません。 - 302は少し奇妙です。私自身は使用したことがありません。どうやら、303 を理解していない以前の HTTP 1.0 バージョンのクライアントのために、303 の従来の代替品のようです。
PHPについて具体的に尋ねたので:
<?php
function header_redirect_permanent($url)
{
header($_SERVER['SERVER_PROTOCOL'] . ' 301 Moved Permanently', true, 301);
header('Location: ' . $url);
}
function header_no_cache()
{
header('Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0');
header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); // past date to encourage expiring immediately
}
必要に応じて、上記のキャッシュ制御ヘッダーを次のように使用して、エージェントが 301 をキャッシュするのを停止することもできます。
header_no_cache();
header_redirect_permanent($url);
または単に追加する
header('Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0');
header('Expires: Sat, 26 Jul 1997 05:00:00 GMT');
header('Location:'.$url, true, 301);
exit;
キャッシュなしの http ステータス コード 301 を使用して、追跡機能を保持しながら URL の正規化を行うことができます。
301 リダイレクトがキャッシュされないようにするには、キャッシュ コントロール ヘッダーを設定するだけです。リダイレクトを元に戻すと、クライアント (ボットとブラウザー) はリダイレクトされなくなります。
header('Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0');
header('Expires: Sat, 26 Jul 1997 05:00:00 GMT');
header('Location:'.$url, true, 301);
exit;
これは、ブラウザーがブックマークの URL を更新し、ボットがインデックスを更新するようにしたいが、無限ループやその他のナンセンスを引き起こすことなく元の URL にリダイレクトすることでそれらを追跡したり、リダイレクトを元に戻したりできるようにする場合に役立ちます。
これは、301 コードをすべてのリダイレクトに使用する必要があることを意味するものではありません。逆に、さまざまな種類のリダイレクトには、Core Xiiがまとめたさまざまなステータス コードがあります。