Почему я получаю ошибку для apple-touch-icon-precomposed.формат PNG

Я создал новый проект rails3 но я вижу следующие журналы много раз в моих логах сервера. Почему я получаю этот запрос и как я могу избежать этого?

Started GET " / apple-touch-значок-предварительно составленный.png " для 192.168.6.2 at 2012-09-18 20:03:53 +0530

ActionController:: RoutingError (нет совпадений маршрутов [GET] "/яблоко-сенсорный значок-составной.png"):

я нигде не давал эту ссылку и не хочу ее отображать изображение везде. Я не знаю, почему этот ресурс пытаются загрузить.

11 ответов


Я думаю, что устройства apple делают эти запросы, если владелец устройства добавляет сайт к нему. Это эквивалент фавикона. Чтобы решить эту проблему, добавьте 2 100×100 файлов png, сохраните их как apple-touch-icon-precomposed.png и apple-touch-иконка.PNG и загрузить его в корневой каталог сервера. После этого ошибка должна исчезнуть.

Я заметил много запросов для apple-touch-icon-precomposed.png и apple-touch-иконка.png в журналах, которые пытались загрузить изображения из корневой каталог сайта. Сначала я подумал, что это неправильная настройка мобильной темы и плагина, но позже узнал, что устройства Apple делают эти запросы, если владелец устройства добавляет к нему сайт.

источник: Почему Веб-Мастера Должны Анализировать Свой Журнал Ошибок 404 (март 2012; Мартин Бринкманн)


если пользователь из веб-браузера Safari (устройства Apple) посещает ваш сайт. Браузер пытается получить значок сайта, если он не определен в <head> в следующем порядке:

  1. apple-touch-значок-57x57-предварительно составленный.формат PNG
  2. apple-touch-иконка-57x57.формат PNG
  3. apple-touch-значок-предварительно составленный.формат PNG
  4. apple-touch-значок.формат PNG

чтобы решить эту проблему, определите значок для веб-браузеров safari или устройств apple. Добавить что-нибудь вот так возглавить раздел вашего сайта:

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

Если вы хотите сохранить <head> очистить затем загрузите значок в корневой каталог вашего сайта с собственным именем.

на размер значка по умолчанию-57px.

вы можете найти более подробную информацию о библиотека разработчиков iOS.


обратите внимание, что это может произойти, даже если пользователь не закладки сайта на главном экране iOS - например, каждый раз, когда вы открываете страницу с помощью Chrome для iOS, он делает GET "/apple-touch-icon-precomposed.png".

я обработал этот и другие не-HTML 404 запросы в моем ApplicationController следующим образом:

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

на format.all response заботится об изображениях, таких как этот PNG-файл (который не существует для моего сайта).


если вы закончили здесь гуглить, это простая конфигурация, чтобы предотвратить эту ошибку полные журналы веб-сервера:

Apache virtualhost

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.png и favicon.ico тоже.


есть камень quiet_assets это заставит замолчать эти ошибки в ваших журналах, если, как и я, вы не хотите добавлять эти файлы в приложение Rails:

https://github.com/davidcelis/quiet_safari


Я, наконец, решена!! Это Веб-Клип функция на устройствах Mac. Если пользователь хочет добавить свой сайт в 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

Как решить?: Добавьте значок для решения проблемы.


альтернативное решение-просто добавить путь к вашему маршруты.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

Если вам все равно, что значок выглядит красиво на всех устройствах Apple, просто добавьте

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

на и icon.png на . Перенаправление на 404.html вместо icon.png тоже работает.


то же самое происходит и со мной. И да, как сказал @Joao Leme, похоже, это связано с тем, что пользователь закладывает сайт на свой рабочий стол устройства.

однако я заметил, что, хотя в журнале есть ошибка, это происходит за кулисами, и пользователь никогда не видит ошибку. Я предполагаю, что устройство делает запрос на сенсорный значок, специфичный для его разрешения (которого там нет), пока по умолчанию для общего apple-touch-icon или apple-touch-icon-precomposed, если присутствует, или же создает небольшой скриншот текущей страницы.

FWIW, поместите значки в каталог / public.


просто создайте файлы нулевого размера, называемые соответствующими именами.

запрос будет удовлетворен без дополнительной передачи данных или дальнейших строк регистрации.


попробуйте изменить ссылку

/apple-touch-icon-precomposed.png 

в:

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