这可能是我见过的最奇怪的事情。当我从 Firefox、Chrome 或 I8 执行 HTTP GET 时,Apache 将返回 200(ok)响应。但是当我在兼容模式下从 IE8 发送相同的请求时,服务器返回 302(临时重定向)并使服务器陷入无限重定向循环。
我有服务器日志可以证明这一点。我通常会收到这样的响应:
127.0.0.1 - - [09/Nov/2010:13:02:25 -0600] "GET /tabby/members/login HTTP/1.1" 200 5712 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12"
但是在 IE8 兼容模式下我收到如下响应:
127.0.0.1 - - [09/Nov/2010:13:03:17 -0600] "GET /tabby/members/login/ HTTP/1.1" 302 - "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MDDC; .NET4.0C; InfoPath.3)"
IE 会一遍又一遍地尝试这个请求,永无止境。这种情况在我本地的开发机器 (Windows) 和测试服务器 (Linux) 上都会发生。
我怀疑有两个原因。第一个可能是我的 .htaccess 文件中的重写规则。我还使用 PHP 在我的某些脚本中设置位置标头,这应该会生成 302。
以下是我的 .htaccess 文件:
# Turn on URL rewriting
RewriteEngine On
# Installation directory
RewriteBase /tabby/
# Protect application files from being viewed
RewriteRule ^(application) - [F,L]
# Allow any other files or directories that exist to be displayed directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Rewrite all other URLs to index.php/
RewriteRule .* index.php/$0 [PT,L]
IE7 处理 302 响应的方式是否存在已知问题?为什么 Apache 会向某些浏览器发送 200 而向其他浏览器发送 302?
答案1
什么是/tabby/members/login
- 它可能是一个程序吗?浏览器嗅探有一个错误?