【问题标题】:Why is my `favicon.ico` request not working?为什么我的“favicon.ico”请求不起作用?
【发布时间】:2011-05-06 02:54:04
【问题描述】:

我的网站上有一个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 时,我都会收到带有匹配 Etag 的 304 Not Modified 响应,并且显然是一张空白图片,尽管 /assets/images/layout/favicon.ico确实如此 存在。

我在尝试使用完整路径访问它时遇到了同样的问题。

这里发生了什么?是什么导致了这个304

【问题讨论】:

    标签: .htaccess favicon


    【解决方案1】:

    首先,我宁愿把这条规则放在 .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"
    

    【讨论】:

    • 感谢您的回答。我添加了条件,以防在 root 以外的其他目录中请求 favicon.ico。至于不想再请求它,我有什么办法可以强迫它?即使我使用 Safari 的 Reset Safari 选项,我仍然得到空白的favicon.ico
    • 你的意思是强制所有浏览器每次都从服务器获取 favicon.ico 吗?
    • 我最终只是将favicon.ico 文件放在了根目录中。感谢您的帮助。
    【解决方案2】:
    <IfModule mod_rewrite.c>
    RewriteRule ^favicon\.ico$ _/img/ico/favicon.ico [L]
    RewriteRule ^apple-touch-icon\.png$ _/img/ico/apple-touch-icon.png [L]
    RewriteRule ^apple-touch-icon-precomposed\.png$ _/img/ico/apple-touch-icon-precomposed.png [L]
    RewriteRule ^apple-touch-icon-57x57-precomposed\.png$ _/img/ico/apple-touch-icon-57x57-precomposed.png [L]
    RewriteRule ^apple-touch-icon-72x72-precomposed\.png$ _/img/ico/apple-touch-icon-72x72-precomposed.png [L]
    RewriteRule ^apple-touch-icon-144x144-precomposed\.png$ _/img/ico/apple-touch-icon-144x144-precomposed.png [L]
    RewriteRule ^apple-touch-icon-114x114-precomposed\.png$ _/img/ico/apple-touch-icon-114x114-precomposed.png [L]
    

    【讨论】:

    猜你喜欢
    • 2012-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-31
    • 2017-01-17
    • 2021-12-20
    • 2013-07-23
    相关资源
    最近更新 更多