Jump to content

Recommended Posts

Собсно уже дня 3 мозг себе ломаю и никак не пойму в чем дело. Может кто-нить что-то посоветует

 

По рекомендации Google Page Speed - пытаюсь подключить в .htaccess мод expires (тех поддержка утверждает что мод к php подключен, проверил - таки да) 

 

В общем пробовал самые разные варианты (безрезультатно), остановился на стандартном:

<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access 7 days"
ExpiresByType application/javascript "access plus 1 year"
ExpiresByType text/javascript "access plus 1 year"
ExpiresByType text/css "access plus 1 year"
ExpiresByType text/html "access plus 7 day"
ExpiresByType text/x-javascript "access 1 year"
ExpiresByType image/gif "access plus 1 year"
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType image/jpg "access plus 1 year"
ExpiresByType image/x-icon "access 1 year"
ExpiresByType application/x-shockwave-flash "access 1 year"
</IfModule>

и все равно не пашет, гугл пейдж спид все равно продолжает утверждать что нифига не пашет. Думал баг валидатора - проверил на других сервисах, все утверждают что кэш браузера не подключен.

Может я что-то упускаю?

 

PS сервер работает на апаче

  • +1 1

Share this post


Link to post
Share on other sites

Весь сервер на апаче?

Share this post


Link to post
Share on other sites

Share this post


Link to post
Share on other sites

но это ведь не включение кеша...

 

<ifModule mod_headers.c>
<filesMatch "\.(css|js)$">
Header set Cache-Control "max-age=2592000, public"
</filesMatch>

 

Share this post


Link to post
Share on other sites

А это что?
 
Servernginx/0.7.67

Share this post


Link to post
Share on other sites
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access 2 days"
ExpiresByType image/jpg "access 1 week"
ExpiresByType image/jpeg "access 1 week"
ExpiresByType image/gif "access 1 week"
ExpiresByType image/png "access 1 week"
ExpiresByType text/css "access 1 week"
ExpiresByType application/pdf "access 1 week"
ExpiresByType text/x-javascript "access 1 week"
ExpiresByType application/x-shockwave-flash "access 1 week"
ExpiresByType image/x-icon "access 1 week"
ExpiresByType application/javascript "access 1 week"
ExpiresByType text/javascript "access 1 week"
</IfModule>

у меня работает

Share this post


Link to post
Share on other sites

А это что?

 

Servernginx/0.7.67

эмм, мне сказали, а я и не перепроверил...

Ок, но в таком случае тут симбиоз nginx + апачь так как правила htaccess в большинстве своем работаю, например на редиректы

Share this post


Link to post
Share on other sites

Да, конечно

 

и видимо ngnix настроен на статику...

Share this post


Link to post
Share on other sites

ок, я с nginx на "ВЫ" - какие правила необходимо прописать в конфигах?

 

а хотя стоп, гугл же есть :D

Share this post


Link to post
Share on other sites

Во многих случаях nginx полностью подхватывает заголовки апача.

mod_expire - это правда мод апача, а не пхп.

Когда включаешь его, гугл не всегда сразу отдупляет - смотри в браузере, откуда грузятся картинки, из кеша, или с сервера.

Проверь заголовки изображений черех вот это. Если кеширование есть значит включилось

Если ничего не помогло - настраивай nginx.

Если хостинг ukraine.com.ua  - там все настраивается в админке хостинга.

Share this post


Link to post
Share on other sites

Во многих случаях nginx полностью подхватывает заголовки апача.

mod_expire - это правда мод апача, а не пхп.

Когда включаешь его, гугл не всегда сразу отдупляет - смотри в браузере, откуда грузятся картинки, из кеша, или с сервера.

Проверь заголовки изображений черех вот это. Если кеширование есть значит включилось

Если ничего не помогло - настраивай nginx.

Если хостинг ukraine.com.ua  - там все настраивается в админке хостинга.

ну на локалке он работает после перезагрузки сервера, я просил хостера ребутнуть сервак - один фиг...

теперь буду требовать доступ к панеле управления и играться с конфигом nginx

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access 7 days"
ExpiresByType application/javascript "access plus 1 year"
ExpiresByType text/javascript "access plus 1 year"
ExpiresByType text/css "access plus 1 year"
ExpiresByType text/html "access plus 7 day"
ExpiresByType text/x-javascript "access 1 year"
ExpiresByType image/gif "access plus 1 year"
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType image/jpg "access plus 1 year"
ExpiresByType image/x-icon "access 1 year"
ExpiresByType application/x-shockwave-flash "access 1 year"
</IfModule>

Этот код подойдет для всех или индивидуально у каждого?

Share this post


Link to post
Share on other sites

Для всех индивидуально ( здесь указаны "сроки хранения")

Share this post


Link to post
Share on other sites

Для всех индивидуально ( здесь указаны "сроки хранения")

да, про сроки я знаю....  у меня тоже Page Speed ругается на кеш браузера.... а как такое составить для себя? че то гугл внятного ответа не дает или я просто не догоняю...

Share this post


Link to post
Share on other sites

в общем доступы к конфигам мне не дают, а экспериментировать удаленно - это бред.

Попросил прописать правило конфига nginx, которое удалось найти в гугле

 

#!Статический контент!
location ~* \.(jpg|jpeg|gif|png|swf|tiff|swf|flv)$ {
root $webroot;
#Кеширум картинки месяца на 4
expires 4M;
#Кешируем везде (и на прокси и на клиентах)
add_header Cache-Control public;
}
location ~* \.(css|js|ico) {
# разрешаем отдавать вместо несжатого файла предварительно
# сжатый с постфиксом ".gz", если такой есть
gzip_static on;
#запрещаем сжатие файлов CSS и JS для проблемных браузеров
gzip_disable Firefox/([0-2]\.|3\.0);
gzip_disable Chrome/2;
gzip_disable Safari;
#Кешируем месяца на 2
expires 2M;
#Кешируем только на клиентах (ибо сжатое)
add_header Cache-Control private;
}

один фиг - page speed утверждает что кэш не включен. Отложил пока эту хрень в далекий ящик, нужно углублять знания в администрировании серверов. 

 

Пока обоходимся кэшированием на стороне сервера, сайт летает как угорелый, жаль что гуглу на это плевать :)

Share this post


Link to post
Share on other sites

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

 

В общем у своего хостера (reg) нашел в поддержке ответ на свой вопрос: "Настройка кэширования и/или сжатия статических файлов в файле .htaccess на виртуальном хостинге невозможна. Если вам критична настройка gzip и expires, рекомендуем приобрести VPS сервер."

 

Быть может это наблюдение поможет некоторым, так что если этот метод не работает, проблема легко может крыться в хостере, поэтому первым делом стоит проверить - нет ли необходимости переехать к другому :)

Edited by Vyatcheslav

Share this post


Link to post
Share on other sites

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

..Мы не используем mod_deflate на наших серверах и не планируем его использовать. Вместо этого мы рекомендуем складывать на диск заранее сжатые файлы и отдавать их в случае, если клиентский браузер поддерживает сжатие...

 

в процессе поиска решения так же столкнулся с проблемами сжатых файлов в Chrome и Safari

в итоге решилось таким путем:

 

1. файлы js и css сжимаем в gzip (например через 7zip), потом их расширение переименовываем с .gz на.jgz

2. складываем переименованные сжатые файлы рядом с оригинальными несжатыми, т.е. был у вас в папке файл style.css, теперь их будет два - style.css и style.css.jgz

3. в .htaccess до строки RewriteEngine On вставляем

# Кеширование картинок, js и css
FileETag MTime Size
<ifmodule mod_expires.c>
 <filesmatch ".(jpg|gif|png|js|css|gz)$">
 ExpiresActive on
 ExpiresDefault "access plus 1 month"
 </filesmatch>
</ifmodule>

<IfModule mod_headers.c>
  <FilesMatch "\.(jpg|gif|png)$">
    Header append Cache-Control "public"  
  </FilesMatch>
</IfModule>

<IfModule mod_headers.c>
  <FilesMatch "\.(js|css|gz|jgz)$">
    Header append Vary Accept-Encoding
    Header append Cache-Control "private"  
  </FilesMatch>
</IfModule>

# использование сжатых файлов
AddEncoding gzip .jgz
RewriteCond %{HTTP:Accept-encoding} gzip
# RewriteCond %{HTTP_USER_AGENT} !Safari
RewriteCond %{HTTP_USER_AGENT} !Konqueror
RewriteCond %{REQUEST_FILENAME}.jgz -f
RewriteRule ^(.*)$ $1.jgz [QSA,L]

<IfModule mod_headers.c>
    Header append Vary User-Agent
    <FilesMatch .*\.js.jgz$>
    ForceType text/javascript
    Header append Vary Accept-Encoding
    Header set Content-Encoding: gzip
    Header set Cache-control: private
    </FilesMatch>
    <FilesMatch .*\.css.jgz$>
    ForceType text/css
    Header append Vary Accept-Encoding    
    Header set Content-Encoding: gzip
    Header set Cache-control: private
    </FilesMatch>
</IfModule>

 

и проверяем на работоспособность

  • +1 2

Share this post


Link to post
Share on other sites

Если css и js проходят через апач, то сжимать можно средствами php скрипта и самостоятельно отдавать нужные заголовки.

Share this post


Link to post
Share on other sites

Если css и js проходят через апач, то сжимать можно средствами php скрипта и самостоятельно отдавать нужные заголовки.

 

Ога - если на выходе прокладкой стоит Nginx, он их все почикает и глахом не моргнет!

Настраивать надо конфиг Nginx

Share this post


Link to post
Share on other sites

Во многих случаях nginx полностью подхватывает заголовки апача.

mod_expire - это правда мод апача, а не пхп.

Когда включаешь его, гугл не всегда сразу отдупляет - смотри в браузере, откуда грузятся картинки, из кеша, или с сервера.

Проверь заголовки изображений черех вот это. Если кеширование есть значит включилось

Если ничего не помогло - настраивай nginx.

Если хостинг ukraine.com.ua  - там все настраивается в админке хостинга.

Спасибо, помогло:) На ukraine.com.ua всё действительно настраивается в админке.

Share this post


Link to post
Share on other sites

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

 

В общем у своего хостера (reg) нашел в поддержке ответ на свой вопрос: "Настройка кэширования и/или сжатия статических файлов в файле .htaccess на виртуальном хостинге невозможна. Если вам критична настройка gzip и expires, рекомендуем приобрести VPS сервер."

 

Быть может это наблюдение поможет некоторым, так что если этот метод не работает, проблема легко может крыться в хостере, поэтому первым делом стоит проверить - нет ли необходимости переехать к другому :)

 

Так же пользуюсь хостингом reg.ru (тариф Host-2)

Есть ocStore 2.1.0.2.1 с шаблоном coloring - в этой связке Google PageSpeed, что правило "Используйте кеш браузера" не выполнено.

Сейчас попробовал ocStore 2.3.0.2 так же с шаблоном coloring (другой версии) - в этой связке Google PageSpeed пишет наоборот, что правило "Используйте кеш браузера" выполнено. :-)

Edited by System256

Share this post


Link to post
Share on other sites

кеширование статики в браузере вряд ли зависит от шаблона

скорее, от настроек сервера/конфигов

Share this post


Link to post
Share on other sites
В 12.07.2014 в 18:12, Einshtein сказал:

Собсно уже дня 3 мозг себе ломаю и никак не пойму в чем дело. Может кто-нить что-то посоветует

 

По рекомендации Google Page Speed - пытаюсь подключить в .htaccess мод expires (тех поддержка утверждает что мод к php подключен, проверил - таки да) 

 

В общем пробовал самые разные варианты (безрезультатно), остановился на стандартном:


<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access 7 days"
ExpiresByType application/javascript "access plus 1 year"
ExpiresByType text/javascript "access plus 1 year"
ExpiresByType text/css "access plus 1 year"
ExpiresByType text/html "access plus 7 day"
ExpiresByType text/x-javascript "access 1 year"
ExpiresByType image/gif "access plus 1 year"
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType image/jpg "access plus 1 year"
ExpiresByType image/x-icon "access 1 year"
ExpiresByType application/x-shockwave-flash "access 1 year"
</IfModule>

и все равно не пашет, гугл пейдж спид все равно продолжает утверждать что нифига не пашет. Думал баг валидатора - проверил на других сервисах, все утверждают что кэш браузера не подключен.

Может я что-то упускаю?

 

PS сервер работает на апаче

Мне помоголо спасибо!!! + включить gzip  этом же файле

вот так

# Включение gzip сжатия русским трактористом text, html, javascript, css, xml:

AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript

AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
SetOutputFilter DEFLATE

Share this post


Link to post
Share on other sites

Подскажите. Как настроить кэширование на стороне браузера в  .htaccess? 

 

Вот мой файл

 

# 2. In your opencart directory rename htaccess.txt to .htaccess.

# For any support issues please visit: http://www.opencart.com

Options +SymLinksIfOwnerMatch

# Prevent Directoy listing 
Options -Indexes

# Prevent Direct Access to files
<FilesMatch "(?i)((\.tpl|\.ini|\.log|(?<!robots)\.txt))">
 Order deny,allow
 Deny from all
</FilesMatch>

# SEO URL Settings
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.teploarsenal\.com\.ua$ [NC]
RewriteRule ^(.*)$ http://teploarsenal.com.ua/$1 [R=301,L]
# If your opencart installation does not run on the main web folder make sure you folder it does run in ie. / becomes /shop/ 

RewriteBase /
RewriteRule ^sitemap.xml$ index.php?route=feed/google_sitemap [L]
RewriteRule ^googlebase.xml$ index.php?route=feed/google_base [L]
RewriteRule ^system/download/(.*) /index.php?route=error/not_found [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css)
RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]

### Additional Settings that may need to be enabled for some servers 
### Uncomment the commands by removing the # sign in front of it.
### If you get an "Internal Server Error 500" after enabling any of the following settings, restore the # as this means your host doesn't allow that.

# 1. If your cart only allows you to add one item at a time, it is possible register_globals is on. This may work to disable it:
# php_flag register_globals off

# 2. If your cart has magic quotes enabled, This may work to disable it:
 php_flag magic_quotes_gpc Off

# 3. Set max upload file size. Most hosts will limit this and not allow it to be overridden but you can try
# php_value upload_max_filesize 999M

# 4. set max post size. uncomment this line if you have a lot of product options or are getting errors where forms are not saving all fields
# php_value post_max_size 999M

# 5. set max time script can take. uncomment this line if you have a lot of product options or are getting errors where forms are not saving all fields
# php_value max_execution_time 200

# 6. set max time for input to be recieved. Uncomment this line if you have a lot of product options or are getting errors where forms are not saving all fields
# php_value max_input_time 200

# 7. disable open_basedir limitations
# php_admin_value open_basedir none
AddDefaultCharset utf-8

 

Может подскажите, что ещё в нём не хватает?

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.