Добрый день.! столкнулся с проблеммой вывода Last-Modified:\Expires
Как правельно сделать вывод данных переменных.
Добрый день.! столкнулся с проблеммой вывода Last-Modified:\Expires
Как правельно сделать вывод данных переменных.
Вариант 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>
Такое решение хорошо тем, что мета тег, во-первых отражает настоящую дату изменения контента, во-вторых появляется только на тех страницах, где такая дата доступна (в данном случае на страницах товаров).
установил вариант 2 ПЕРЕД (AIMatrix DDoS inspector)
проверяю last-modified.com/ru/last-modified-if-modified-since-php.html
сООБЩЕНИЕ Last-Modified не найден!
Вариант 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-файлы, поскольку идеальное решение вопроса - не только отдать заголовки на изменившийся контент, но и отдать заголовки поисковому роботу, когда он делает запрос "изменилась ли эта страница?" и ожидает ответный контент лишь в случае действительного изменения.
Да спасибо 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" />
Откуда в системе берется другое значение.
Причина станет понятна из сведений от 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 самим сервером. И отключите ее или укажите, чтобы дату отправляла правильную.