为什么我的`favicon.ico`请求无效?

时间:2011-05-06 02:54:04

标签: .htaccess favicon

我的网站上有favicon.ico

在HTML中,我链接到它的位置......

<link rel="icon" href="/assets/images/layout/favicon.ico" type="image/x-icon" />

我的.htaccess也有。

# Redirect /favicon.ico requests
RewriteCond %{REQUEST_URI} !^assets/images/layout/favicon\.ico [NC]
RewriteCond %{REQUEST_URI} ^favicon\.(gif|ico|png|jpe?g)$ [NC]
RewriteRule ^(.*)$ assets/images/layout/favicon.ico [R=301,L]

...将/favicon.ico次请求重定向到其他位置。

出于某种原因,每次我在浏览器中请求favicon.ico时,即使{{1} 304 Not Modified,我也会得到/assets/images/layout/favicon.ico响应,其中匹配的Etags和显然是一个空白图片确实存在。

Example

尝试访问完整路径时会遇到同样的问题。

这里发生了什么?导致此304的原因是什么?

2 个答案:

答案 0 :(得分:2)

首先,我宁愿把这条规则放在.htaccess中:

RewriteRule ^favicon\.(gif|ico|png|jpe?g)$ /assets/images/layout/favicon.ico [L,NC]

然后,如果您的网页中有此内容:

<link rel="icon" href="/favicon.ico" type="image/x-icon" />

/favicon.ico内部重定向/assets/images/layout/favicon.ico

我已经在IE,Firefox和Chrome中对此进行了测试,并且所有3个都显示了这种行为,这是第一次(或清除缓存后)我获得了favicon.ico的200,但之后所有浏览器都缓存了这个图标文件,不要费心向服务器发送另一个请求。通过此设置,我在测试中未发现任何304

我的访问日志:

<强>铬

127.0.0.1 - - [05/May/2011:23:58:15 -0400] "GET /favicon.ico HTTP/1.1" 200 1150 "-" "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/534.24 (KHTML, like Geck
o) Chrome/11.0.696.60 Safari/534.24"

<强> IE

127.0.0.1 - - [06/May/2011:00:05:18 -0400] "GET /favicon.ico HTTP/1.1" 200 1150 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .
NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)"

<强>火狐

127.0.0.1 - - [06/May/2011:00:07:33 -0400] "GET /favicon.ico HTTP/1.1" 200 1150 "-" "Mozilla/5.0 (Windows NT 5.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1"

答案 1 :(得分:0)

String html = ... // your html text
String number = String.Empty; // default value if not found

Match m = Regex.Match(html, @"<span class\=""vi-buybox-watchcount"">([0-9]+?)<\/span>");

if (m.Success)
    number = m.Groups[1].Value;