为什么我的apple-touch-icon-precomposed.png错误


247

我创建了一个新的rails3项目,但是我在服务器日志中看到了很多次以下日志。为什么我收到这些请求,如何避免这些请求?

在2012-09-18 20:03:53 +0530开始为192.168.6.2获取``/apple-touch-icon-precomposed.png''

ActionController :: RoutingError(没有路由与[GET]“ /apple-touch-icon-precomposed.png”匹配):

我没有在任何地方提供此链接,也不想在任何地方渲染此图像。我不知道为什么要尝试加载此资源。


4
我在.net项目中得到了完全相同的东西。与红宝石无关。我不明白的是为什么这不是标准的404 not found错误。但事实并非如此。只是一个路由错误。我得到:找不到路径“ /apple-touch-icon-precomposed.png”的控制器或未实现IController。
horace 2012年

Answers:


221

我想如果设备所有者将网站添加到其中,苹果设备会发出这些请求。这相当于收藏夹图标。要解决此问题,请添加2 100×100 png文件,将其另存为apple-touch-icon-precomposed.png和apple-touch-icon.png并将其上传到服务器的根目录。在那之后,错误应该消失了。

我在尝试从站点根目录加载图像的日志中注意到有很多关于apple-touch-icon-precomposed.png和apple-touch-icon.png的请求。我最初以为这是对移动主题和插件的错误配置,但是后来发现,如果设备所有者将网站添加到其中,Apple设备会发出这些请求。

来源:网站站长为什么要分析其404错误日志(2012年3月;作者Martin Brinkmann)


52
我找到了一篇很好的文章,详细介绍了我想知道的所有内容(以及更多): mathiasbynens.be/notes/touch-icons
Alexis

对于根目录,您是指应用程序/公共目录还是公共目录?
孟加拉邦

我相信以上作者表示已配置的Web文档根目录,例如,在Apache 2.4中,它通常是/ var / www / htdocs
Hgehlhausen

70

如果用户来自Safari Web浏览器(Apple设备),请访问您的网站。如果未按<head>以下顺序定义网站图标,浏览器将尝试获取它:

  1. apple-touch-icon-57x57-precomposed.png
  2. apple-touch-icon-57x57.png
  3. apple-touch-icon-precomposed.png
  4. apple-touch-icon.png

要解决此问题,请为Safari Web浏览器或Apple设备定义一个图标。在网站的标题部分添加以下内容:

<link rel="apple-touch-icon" href="https://stackoverflow.com/custom_icon.png"/>

如果您想保持<head>清洁,则可以使用适当的名称将图标上传到网站的根目录。

默认的图标大小为57px

您可以在iOS开发人员库中找到更多详细信息。


即使有了这个定义,我仍然可以得到apples-touch-icon-precomposed.png的404代码
克里斯·海恩斯

3
现在建议默认图标大小为152×152像素,以适应更新的iPad。
Andrew Lott 2014年

2
我仍然遇到相同的错误,以及custom_icon.png的其他路由错误。顺便说一下,我在使用Safari 8.0.3作为浏览器的OSX 10.10.2上的开发中运行rails时遇到这些错误。
2015年

8

如果您在这里结束了谷歌搜索,这是一个简单的配置,可以防止此错误在Web服务器日志中显示完整:

Apache虚拟主机

Redirect 404 /apple-touch-icon-precomposed.png
<Location /apple-touch-icon-precomposed.png>
    ErrorDocument 404 "apple-touch-icon-precomposed does not exist"
</Location>

Nginx服务器块:

location =/apple-touch-icon-precomposed.png {
        log_not_found off;
        access_log off;
}

PS:可能是您要添加apple-touch-icon.pngfavicon.ico太。


5

请注意,即使用户未将网站添加到自己的iOS主屏幕上,也可能会发生这种情况-例如,每当您使用Chrome for iOS打开页面时,它都会执行GET "/apple-touch-icon-precomposed.png"

我已经在ApplicationController中按如下方式处理了此请求和其他非HTML 404请求:

respond_to do |format|
  format.html { render :template => "error_404", :layout => "errors", :status => 404 }
  format.all { render :nothing => true, :status => 404 }
end

format.all响应负责图像的像这样的PNG文件(不我的网站存在)。


4

有一颗像quiet_assets这样的宝石如果像我一样,如果您不想将这些文件添加到Rails应用中,则这样可以使日志中的这些错误静音:

https://github.com/davidcelis/quiet_safari


这是最好的解决方案...如果您不禁止记录日志,那么无奈和庞大的日志文件。当Apple决定时,要求更改尺寸...让我们继续追寻同一织补图标的更多版本。
vanboom

4

如果您不关心图标在各种Apple设备上的外观漂亮,只需添加

get '/:apple_touch_icon' => redirect('/icon.png'), constraints: { apple_touch_icon: /apple-touch-icon(-\d+x\d+)?(-precomposed)?\.png/ }

到您的config/routes.rb文件,还有一些icon.png到您的public目录。重定向到404.html而不是icon.png也可以。


在这里工作正常。
惠灵顿

3

我终于解决了!这是Mac设备上的Web剪辑功能。如果用户要在Dock o Desktop中添加您的网站,则请求此图标。

You may want users to be able to add your web application 
or webpage link to the Home screen. These links, represented 
by an icon, are called Web Clips. Follow these simple steps 
to specify an icon to represent your web application or webpage
on iOS.

更多信息: https : //developer.apple.com/library/content/documentation/AppleApplications/Reference/SafariWebContent/ConfiguringWebApplications/ConfiguringWebApplications.html

如何解决?: 添加图标以解决问题。


2

另一种解决方案是简单地将一条路由添加到您的routes.rb

它基本上捕获了Apple的请求并将404呈现回客户端。这样,您的日志文件就不会混乱。

# routes.rb at the near-end
match '/:png', via: :get, controller: 'application', action: 'apple_touch_not_found', png: /apple-touch-icon.*\.png/

然后将方法“ apple_touch_not_found”添加到application_controller.rb

# application_controller.rb
def apple_touch_not_found
  render  plain: 'apple-touch icons not found', status: 404
end

0

对我来说,同样的事情正在发生。是的,正如@Joao Leme所说,这似乎与用户将网站添加到其设备主屏幕的书签有关。

但是,我注意到,即使日志中有错误,该错误仍在幕后发生,用户永远也看不到该错误。我假设设备会向其请求特定于其分辨率的触摸图标(该触摸图标不存在),直到默认为常规apple-touch-iconapple-touch-icon-precomposed(如果存在),否则会生成当前页面的小屏幕截图。

FWIW,将图标放在/ public目录中。


1
添加图像不能解决问题。正在请求不存在的资产。每次发生此请求时,服务器都会做出响应并写入日志条目。那不是很有效。
塔斯(Tass)2013年

-1

只需创建零大小的文件(称为适当的名称)即可。

无需额外的数据传输或更多的日志记录行,即可满足该请求。


1
答案很老,但是建议不要提供零尺寸的文件,因为Web Clip(用户可以在主屏幕上创建的链接)将显示一个没有内容的方形框。尽管我不喜欢Apple创建的复杂反模式,但比起向用户提供shxt体验(如果有的话),在日志文件中堆积错误会更好。
安德里亚·莫罗

-4

尝试从更改链接

/apple-touch-icon-precomposed.png 

至:

<%=asset_path "apple-touch-icon-precomposed.png" %>

我没有在任何地方提供此链接,也不想在任何地方渲染此图像。我不知道为什么要尝试加载此资源。
Akash Agrawal 2012年

尝试apple-touch-icon-precomposed在您的项目目录中查找。我认为此链接已包含在布局模板中,但我不是很确定。
济州2012年

1
这是iOS要求的标准图片;它与一个人的项目文件中的任何链接都不相关。
布拉德·科赫

1
我的droid razr也要求该图片,因此我不确定它仅适用于iOS设备。
塔斯(Tass)

2
苹果为什么不能像其他所有人一样满足于favicon.ico?
托尼·佩恩
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.