3

我的应用程序在从 googlebot 调用时抛出一个Zend_Locale_Exception错误消息,其中 ZF 发送以下错误消息:

区域设置的自动检测失败!

问题可能是因为未设置默认语言环境,但我该如何调试呢?

由于 google bot 不是实时的,我需要实际伪造 bot 发出的 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

我的建议是:

  • 始终设置默认语言环境,因此如果自动检测失败,无论如何都会默认使用语言环境。

为此,您可以添加application.ini

resources.locale.default = "en_US"

此外,请确保不要在引导程序中使用检测到的语言环境,如果必须这样做,请始终确保$this->bootstrap('locale');在使用Zend_Locale.

您可以使用终端和浏览器(例如 Lynx)模拟相同的行为,然后您可能需要取消设置一些环境变量(例如LANGLANGUAGE)。

于 2012-04-11T14:39:43.497 回答
3

Google 网站管理员工具中有一个“Fetch as Googlebot”功能。您也许可以使用它来触发机器人访问您的网站。您甚至可以临时phpinfo()向您的站点添加一个页面并使用该功能来点击它,这将列出它向您显示的响应中的所有标题。

于 2012-04-11T15:18:31.417 回答
1

您看到异常的原因可能有很多,因此您不能只是“测试”它。当您需要针对 googlebot 请求进行测试时,您必须存储该请求,以便稍后在您的网络服务器上重放它。

但是,正如所写,触发此事件的原因可能有很多,您可以在Locale.php.

于 2012-04-11T15:13:17.753 回答
1

wget --user-agent "googlebot(at)googlebot.com 用户代理:Mozilla/5.0(兼容;Googlebot/2.​​1;+http://www.google.com/bot.html)" "http://www .mysite.com.br/"

于 2012-04-11T14:54:15.580 回答