3

私のアプリケーションはZend_Locale_Exception、ZFが次のエラーメッセージを送信するgooglebotから呼び出されたときにをスローします。

ロケールの自動検出に失敗しました!

問題はおそらくデフォルトのロケールが設定されていないためですが、どうすればこれをデバッグできますか?

グーグルボットはリアルタイムではないので、ボットが行っているHTTPリクエストを実際に偽造する必要がありますが、このリクエストがどのように行われているのかを知るにはどうすればよいですか?

curlを使用してAccept-Languageヘッダーを送信しようとしても、エラーは再現されません。

   $ch = curl_init();
   curl_setopt($ch, CURLOPT_URL, 'http://www.mysite.com.br/');
   curl_setopt($ch, CURLOPT_HEADER, true);
   curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept-Language'));
   echo $data = curl_exec($ch);
   curl_close($ch);

編集:

さらに明確にするために:

  • 問題はおそらくデフォルトのロケールがないことだと思いますが、これをデバッグする必要があります
  • ブラウザのユーザーエージェントを変更しても機能しません。UA文字列を変更するだけで、ロケールは引き続きブラウザから送信されます。
4

4 に答える 4

3

Googleウェブマスターツールには「FetchasGooglebot」機能があります。これを使用して、ボットがサイトに攻撃を仕掛けることができる場合があります。サイトに一時的にphpinfo()ページを追加し、その機能を使用してそれをヒットすることもできます。これにより、表示される応答のすべてのヘッダーが一覧表示されます。

于 2012-04-11T15:18:31.417 に答える
3

私の推奨事項は次のとおりです。

  • 常にデフォルトのロケールを設定するため、自動検出が失敗した場合でも、デフォルトでロケールが使用されます。

そうするために、あなたはあなたのapplication.iniに追加することができます:

resources.locale.default = "en_US"

また、ブートストラップで検出されたロケールを使用しないようにしてください。使用する必要がある場合は、を使用するメソッド/プラグインを使用してロケールリソースが「ブーストストラップ」されていることを常に確認してください$this->bootstrap('locale');Zend_Locale

端末とLynxなどのブラウザーを使用して同じ動作をシミュレートできます。その場合、おそらくいくつかの環境変数(LANGLANGUAGEなど)の設定を解除する必要があります。

于 2012-04-11T14:39:43.497 に答える
1

wget --user-agent "googlebot(at)googlebot.com User-Agent:Mozilla / 5.0(互換; Googlebot / 2.1; + http://www.google.com/bot.html)" "http:// www .mysite.com.br / "

于 2012-04-11T14:54:15.580 に答える
1

例外が表示される理由は多数あるため、これを単に「テスト」することはできません。googlebotリクエストに対してテストする必要がある場合は、後でウェブサーバーに対して再生できるようにリクエストを保存する必要があります。

ただし、記述されているように、これがトリガーされる理由は多数あります。自動検出はで見つかりますLocale.php

于 2012-04-11T15:13:17.753 に答える