Как закешировать картинки без расширения ?


sanek1991
1256

Сайт на движке форума Xenforo

Во вложениях картинки у него отображаются специальным обработчиком

Для вывода картинки получается вот такая конструкция:

[IМG]https://site.ru/forum/attachments/26727/[/IМG]

Не получается включить для них кеширование в браузере клиента.

Пробовал такие варианты в htaccess:

<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access 7 days"
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType image/jpg "access plus 1 year"
</IfModule>

и такой:

<FilesMatch "\.(flv|swf|ico|gif|jpg|jpeg|pdf|js|xml|json|css|gz|less|woff2|png)$">
Header set Cache-Control "public, max-age=18000000"
Header set Expires "Sun, 26 Jul 2020 09:09:14 GMT"
</FilesMatch>

Не кеширует.

Возможно ли вообще ?


SocFishing

в консоли смотрите прописывается ли заголовок?

Как закешировать картинки без расширения ?

<FilesMatch «.(flv|gif|jpg|jpeg|png|ico|swf|js|css|pdf)$»>

Header set Cache-Control «max-age=2592000»

</FilesMatch>


sanek1991

SocFishing:
в консоли смотрите прописывается ли заголовок?

В том-то и дело что не прописывается.

Вот какие заголовки отправляются на вложения картинок



jpg

1.jpg


hakuna matata

Пишешь правила в htaccess, а отдает пикчи nginx.


sanek1991

Подозреваю что поможет только правка скриптов движка.

Или можно все-таки как-то попробовать через htacces ?


SocFishing

sanek1991, у вас nginx, а не apache. Директивы htaccess поддерживаются только apache.

В данном случае, если у вас VPS, то менять конфиг nginx.

server {

listen 80;

server_name mysite.com;

# Задаем правила обработки статического контента (типов файлов можно поставить и больше)

location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|pdf|ppt|txt|bmp|rtf|js)$ {

root /path/to/document/root/; # Путь к корню вашего сайта

access_log off; # не пишем логи

expires 3d; # кешируем у клиента на 3 дня

}

}


sanek1991

SocFishing:
sanek1991, у вас nginx, а не apache. Директивы htaccess поддерживаются только apache.

Это понятно, но если картинку вставлять не через обработчик движка, то кеширование есть

То есть например не так:

[IМG]https://site.ru/forum/attachments/26727/[/IМG]

а так:

[IМG]https://site.ru/forum/images/26727.png[/IМG]

Причем значение max-age берет из установок htaccess



jpg

1.jpg


sanek1991

Пробовал через LocationMatch, вываливает ошибку 500

<LocationMatch «^/attachments/»>

Header set Cache-Control «max-age=604800, public»

</LocationMatch>


SocFishing

sanek1991, вы уверены что через htaссess берет, может на PHP прописан header(«Cache-Control: max-age=604800»);

Кстати, у вас может быть связка nginx + apache (как бекенд) в таком случае картинки идут в загрузку через nginx, а PHP идёт через apache. Скорее всего так и есть.

Это хостинг или VPS?

Если хостинг, то вред ли получится, вариант выставить в head метатег

<meta http-equiv=»Cache-Control» content=»max-age=604800, must-revalidate» />

и забить.


Sitealert

Какие нахрен энджинксы и апачи… Сервер вообще не видит никакого файла, поэтому и бесполезно прописывать какие-то серверные директивы.


ivan-lev

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

Отчего же? По location-у «грепнутому» вполне себе применятся, даже если файлика нет, а бэкенд отдаёт 200.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *