3

HTML を検証したり、任意の検索エンジンで Web を登録したりすると、302 エラーが発生します。

その理由は、header() 関数です。取り外せば200OKステータスで大丈夫です。

したがって、主な問題は、Web を多言語化するためにこのリダイレクトが必要なことです。

ロジックは次のとおりです。ユーザーが初めて web ページに入ったとき index.php - require_once 関数を含むファイル:

function cookies() {
    if (!isset($_COOKIE["lang"])){
    setcookie('lang','ukr', time()+(60*60*24*31)); 
    header('Location: index.php');
}}
cookies();

そのため、ユーザーには、既定の言語で既にファイルされているページが表示されます。

require_once ファイルからのリダイレクトがない場合、mysql からのデータはダウンロードされず、ユーザーにはテキストが表示されません。

質問: これを HTTP 302 のままにしておくか、サイト/ロジック全体を再構築して、インデックス ページでリダイレクトを行わないようにする必要がありますか?

4

3 に答える 3

4

302エラーではありません。「見つかりました」(別名「お求めのドキュメントはこちらにあります」)のステータス コードです。ヘッダーを追加すると、PHP はこれを自動的にLocation挿入します (手動でステータスを挿入する場合を除きますが、ここに 301 は必要ありません)。

これは、言語設定に基づいて別のドキュメントを取得するよう人々に伝えている場合に期待される応答です。

index.phpただし、からにリダイレクトするのは奇妙index.phpです。おそらく、リダイレクトするのではなく、適切なドキュメントを直接返す必要があります。

于 2013-09-26T14:28:41.300 に答える
1

わかった。それは実際には非常に簡単です。

バリデーターは Cookie を受け入れません。そのため、無限ループに陥ります。

これをテストできます:

  1. コンピューターからすべての Cookie を削除します。
  2. ブラウザで Cookie を無効にして、ウェブサイトを読み込んでみてください。
于 2013-09-25T14:45:42.920 に答える
0

header("location: .... を使用するたびに、302 が返されます。これはエラーではなくステータスであり、サイトがページをリダイレクトしたことをブラウザに伝えています:
http://www.w3.org/Protocols/ rfc2616/rfc2616-sec10.html

それらのバリデーターとエンジンを読んで、302 を持つことが何をしようとしていても問題になるかどうかを確認してください。通常はそうあるべきではありません。

汚い方法はヘッダーを強制することです。個人的にはこれをお勧めしませんし、実際にどのような副作用があるのか​​ もわかりませんが、これらのエンジンをだますための簡単な回避策になる可能性があります。

function cookies() {
    if (!isset($_COOKIE["lang"])){
    setcookie('lang','ukr', time()+(60*60*24*31)); 
    header('Location: index.php');
    header('HTTP/1.1 200 OK'); // <--- Forcing the header status
}}
cookies();
于 2013-09-26T14:35:38.937 に答える