Форум пользователей Impera CMS
Impera CMS - отличный движок для лёгкого создания интернет магазина.
Обладает невероятным количеством функций, необходимых в онлайн торговле.

Следить
Главная
09:49
04 дек
#
?
написал:

Добрый день.! столкнулся с проблеммой вывода Last-Modified:\Expires

Как правельно сделать вывод данных переменных.

13:17
04 дек
#
написал:

Вариант 1 В программной код движка, например файл http://сайт/index.php (это лишь пример, вообще говоря, выбор исправляемого файла зависит от постановки задачи), внести свою правку вида header('Last-Modified: нужная дата');, тем самым отправлять заголовок средствами PHP.

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

Вариант 2 В корневой файл http://сайт/.htaccess добавить следующие строки:

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


В результате заголовки будут отправляться самим сервером, без учета того, когда было же реальное изменение контента. По сути, будут отправляться заголовки таким образом, словно контент изменился сегодня и дата следующего изменения предполагается не ранее указанного числа дней / лет.

Вариант 3 Формировать этот заголовок в шаблоне, так как согласно сведениям W3C (World Wide Web Consortium) - прямая ссылка www.w3.org/wiki/HTML/Elements/meta - заголовочный мета тег <meta http-equiv="Last-Modified" content="нужная дата" /> является легальным тегом в заголовочной части html-страницы.

То есть этот тег мы можем внести в секцию <head> нашего файла index.tpl, размещенного в папке http://сайт/design/наш_шаблон/. Данную секцию ищите в самом начале файла.

Нужную дату для мета тега (чтобы передать ее как глобальную переменную в index.tpl) можно было бы сформировать прямо в шаблоне страницы товара - это файл product.tpl. Ведь у записи о товаре - в данном случае это будет переменная $product, доступная в момент отрисовки страницы товара - есть специальное поле $product->modified, которое содержит дату последнего изменения текущей записи. Дата хранится здесь в формате ГГГГ-ММ-ДД ЧЧ:ММ:СС.

Однако принимая во внимание, что движок отрисовывает страницу сайта противоходом - то есть сначала рисуется центральная часть (когда пользователь смотрит страницу товара, то это будет файл product.tpl) и затем поверх отрисованного центра дорисовывается общий макет страницы (это файл index.tpl), а также что в этом случае переменная $product будет доступна в обоих файлах, то мета тег мы можем сформировать прямо в файле index.tpl следующим образом:

<html>
    <head>
        ...
        ...

        {* если известна непустая дата последнего изменения *}
        {if isset($product->modified) && $product->modified != '0000-00-00 00:00:00'}
            <meta http-equiv="Last-Modified" content="{$product->modified|date_format:'r'}" />
        {/if}

        ...
        ...
    </head>
    ...
    ...
</html>


Такое решение хорошо тем, что мета тег, во-первых отражает настоящую дату изменения контента, во-вторых появляется только на тех страницах, где такая дата доступна (в данном случае на страницах товаров).

14:33
04 дек
#
?
написал:

установил вариант 2 ПЕРЕД (AIMatrix DDoS inspector)

проверяю last-modified.com/ru/last-modified-if-modified-since-php.html

сООБЩЕНИЕ Last-Modified не найден!

15:53
04 дек
#
написал:

Вариант 2 вообще говоря служит для иных целей - сообщить о дате истечения актуальности контента. Поэтому шлет только заголовки Expires - образно говоря, противоположную часть Last-Modified. В то время как Last-Modified определяет дату последнего изменения, заголовок Expires определяет дату следующего предполагаемого изменения.

Кроме того, указанный вами URL проверки Last-Modified анализирует только серверную часть HTTP-заголовков. Поэтому здесь подойдет вариант 1.

Вариант 3 (а может быть и вариант 1) войдет в обновление движка, так как поисковые системы анализируют в том числе и мета заголовки в теле документа. Затронутые изменения движка для поддержки варианта 3 выразятся в модификации модуля http://сайт/design/common_parts/AIMatrix/Constructor/head.htm, для поддержки варианта 1 придется вносить правки в PHP-файлы, поскольку идеальное решение вопроса - не только отдать заголовки на изменившийся контент, но и отдать заголовки поисковому роботу, когда он делает запрос "изменилась ли эта страница?" и ожидает ответный контент лишь в случае действительного изменения.

16:03
04 дек
#
?
написал:

Да спасибо 1 Вариант отлично сработал.

Но теперь есть вопрос http://last-modified.com/ru/last-modified-if-modified-since-php.html

Показавает Expires: Thu, 19 Nov 1981 08:52:00 GMT

Хотя в Исходном коде <meta http-equiv="Expires"
content="Thu, 05 Dec 2013 16:01:55 GMT" />

Откуда в системе берется другое значение.

16:30
04 дек
#
написал:

Причина станет понятна из сведений от W3C по указанной выше ссылке. Вот что там написано:

    When the http-equiv attribute is specified on a meta element,
    the element is a pragma directive. You can use this element
    to simulate an HTTP response header, but only if the server
    doesn't send the corresponding real header; you can't override
    an HTTP header with a meta http-equiv element.
    Когда атрибут http-equiv определен в элементе <meta>,
    данный элемент считается предписывающей директивой. Вы можете
    использовать этот элемент для имитации заголовка HTTP-ответа,
    но только если сервер не отправил такой же (настоящий) заголовок;
    вы не можете переопределить HTTP-заголовок (имелось в виду
    уже отправленный сервером) с помощью элемента <meta http-equiv=...>.


Таким образом, ваш сервер уже отправил HTTP-заголовок Expires и далее по стандарту отправил сгенерированный HTML-контент страницы. Естественным образом заголовок Expires из серверных HTTP-заголовков оказался более приоритетным по сравнению с дублем Expires, но уже из менее весомых мета-заголовков HTML.

Следовательно смотрите на сервере (конфигурация сайта, может что-то в файле .htaccess), какая именно настройка отвечает за отправку Expires самим сервером. И отключите ее или укажите, чтобы дату отправляла правильную.

16:32
04 дек
#
?
написал:

Да понял, Спасибо Вам за поддержку и оперативность.

Написание ответа

Перед публикацией рекомендуется использовать Предпросмотр, чтобы увидеть конечный вид сообщения.


Обратите внимание! Для противодействия спаму новые посты форума проявляются с задержкой от нескольких минут, пока не пройдут модерацию.