266

我创建了一个新的 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

11 回答 11

239

如果设备所有者将站点添加到其中,我猜苹果设备会发出这些请求。这相当于网站图标。解决方法是添加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)

于 2012-10-02T02:04:18.560 回答
77

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

  1. 苹果触摸图标 57x57-precomposed.png
  2. 苹果触摸图标 57x57.png
  3. 苹果触摸图标precomposed.png
  4. 苹果触摸icon.png

要解决此问题,请为 Safari Web 浏览器或 Apple 设备定义图标。将这样的内容添加到您网站的 head 部分:

<link rel="apple-touch-icon" href="/custom_icon.png"/>

如果您想保持<head>清洁,请使用正确的名称将图标上传到站点的根目录。

默认图标大小为57px 。

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

于 2013-08-15T15:30:17.987 回答
10

如果您在此处结束谷歌搜索,这是一个简单的配置,可防止此错误填满 Web 服务器日志:

阿帕奇虚拟主机

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;
}

apple-touch-icon.pngPS:您是否也想添加favicon.ico

于 2016-12-26T23:55:01.193 回答
5

请注意,即使用户没有将站点添加到他们的 iOS 主屏幕上,也会发生这种情况 - 例如,每当您使用 iOS 版 Chrome 打开页面时,它都会执行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 文件(我的站点不存在该文件)之类的图像。

于 2012-12-19T19:00:44.813 回答
5

我终于解决了!!这是 Mac 设备上的Web Clip功能。如果用户想在 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

如何解决?: 添加一个图标来解决问题。

于 2016-09-22T16:28:28.770 回答
5

如果您不关心在各种 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工作。

于 2017-03-11T15:05:33.560 回答
4

如果像我一样不想将这些文件添加到 Rails 应用程序中,那么有一个像quiet_assets这样的 gem 会在你的日志中消除这些错误:

https://github.com/davidcelis/quiet_safari

于 2015-02-20T22:25:54.790 回答
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
于 2017-03-07T13:31:53.370 回答
-1

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

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

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

于 2012-12-18T16:37:26.460 回答
-1

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

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

于 2017-04-13T11:07:20.253 回答
-4

尝试更改链接

/apple-touch-icon-precomposed.png 

到:

<%=asset_path "apple-touch-icon-precomposed.png" %>
于 2012-09-18T15:54:21.703 回答