Почему скрипт не отдает параметры Last-Modified
|
Почему скрипт не отдает параметры Last-Modified
|
|
|
|
|
|
Это все еще актуально?
Надо просто прописать эту строчку в init.php и больше ничего и нигде не дописывать? Или надо как-то по-другому настраивать Last-Modified? |
|
|
|
|
|
Вопрос актуален
|
|
|
|
|
|
Угу, вы сами-то в смысл сказанного вдумайтесь - сначала переходит на страницу, потом проверяет дату модификации. Т.е. снижения нагрузки ни какой не будет - все равно страница перечитываться станет.
И о каком СЕО-эффекте вы речь ведете? Только конкретно, пожалуйста. |
|
|
|
|
|
Робот не переходит на страницу, а посылает запрос серверу и если документ не изменился получает ответ 304 и неиндексирует , вот отсюда и снижается нагрузка на сервер.
|
|
|
|
|
|
И как сервер узнает, что документ не изменился?
|
|
|
|
|
|
Угу, а еще учтем, что на любой страницы мало-мальски нормального сайта выводится куча динамической информации, страница меняться будет всегда. Если это, конечно, не сайт типа maya_sаbaka.narod.ru
![]() |
|
|
|
|
|
Совсем запутался в Ваших комментариях,
одни говорят, если правильно настроить Last-Modified, то снижается нагрузка на сервер, другие говорят P.S. И как сервер узнает, что документ не изменился? Лично мне говорят, P.S. что мне необходимо установить на своем сайте Last-Modified, для главной страницы mysyte.ru нужно указывать срок не более 5 дней до текущей даты, для раздела – не более 2 недель, для страниц товаров/статей – не более 30 дней. А как это сделать -не пойму. Установил header('Last-Modified: '.gmdate('D, d M Y H:i:s'). ' GMT'); как написано выше, В панели яндекс.вебмастер ответ сервера показывает Last-Modified постоянно на четыре часа прошедшей даты может кто подскажет как поставить будущую дату? |
|
|
|
|
|
Строчка
По поводу нагрузки на сервер: т.к. в этом решении не обрабатывается запрос If-Modified-Since, следовательно 304 заголовок не будет отдан и запрашивающая сторона не узнает о том, что страница не изменилась и запросит её в обычном порядке. Вот моя версия решения проблемы. Работает для элементов инфоблоков и страниц, реализованных через файлы.
Данный код можно поместить в \bitrix\modules\main\include\prolog_after.php, заменив им фрагмент:
В фильтре (массив $arFilter) необходимо указать вместо 'CODE' => $_REQUEST['ELEM_CODE'] условие, которое актуально для вашего ресурса. Проверить результаты можно . |
|||||||
|
|
|
|
Ваш пример интересен
разместил код в указанном месте но, $_REQUEST['ELEM_CODE'] ничего не даст, т.к. включено ЧПУ отсюда вопрос, как по ссылке (ЧПУ) получить ID для подстановки в фильтр выборки т.е. должно быть вроде этого $arFilter = Array("ID"=>$ID); Как получить $ID ? Документацию читал, но мало. Столкнулся недавно. ----------------- добавлю, чтобы получить ИД, нужно получить символьный код (по простому ссылка из адресной строки) Как ее получить ? курится а и Чтобы запустить этот пример
|
|||
|
|
|
|
Так и не удалось получить дату изменения (редактирования) страницы (статичной)
Уточню, Версия "1С-Битрикс: Управление сайтом 12.0.6" |
|
|
|
|
|
Если Вы говорите о статичной странице, все равно должен отрабатывать
А для динамических страниц, я, как ни странно, писал бы дату в глобальную переменную и читал ее в эпилоге |
|||
|
|
|
|
Дык, все страницы сайта битрикса это динамика. Т.е. статика это не home.html
Что касается даты в global, это идея, только где идет обработка таблицы iBlock ? |
|
|
|
|
|
Заранее извиняюсь, что не очень тщательно читал посты выше, и надеюсь что суть, которую уловил из поста, например, Алексея, понял правильно.
Во-первых, ок, если говорить о динамических страницах в таком ключе, то я имел в виду страницы, использующие данные инфоблоков для контента, откуда и можно получить "TIMESTAMP_X", например страница с детальным текстом новости. Во-вторых, если на странице (пусть и динамической с точки зрения php), подключены header, footer, а между ними только текст и html-теги, то такую страницу с точки зрения Битрикса можно считать страницей со статичной информацией, и актуальная дата будет соответствовать дате изменения файла, то есть результату ф-ции filemtime По поводу даты в global - с одной стороны, я погорячился, с другой - тут зависит от сайта. Если используется не слишком много комплексных компонент и шаблонов можно в разные места поместить код, пишущий дату в переменную.. например в тело кастомизированного компонента, в главный файл шаблона комплексного компонента, в эпилог шаблона обычного компонента, много куда в общем |
|
|
|
|
|
Имеет смысл через
|
|||
|
|
|
Мне на одном проекте тоже пришлось делать такую же хрень. Модифицировать ядро, как вы, я не стал, ограничился событиями. В init.php:
Смысл, надеюсь, понятен. Сначала проверяем, задана ли глобальная переменная $lastModified. Если она задана, то отдаём заголовок Last-Modified. Потом смотрим, есть ли в запросе заголовок If-Modified-Since. Если он есть и он больше даты последнего изменения, отдаём пустую страницу со статусом 304 Not Modified. Это половина апельсина. Вторая половина -- задать переменную $lastModified. Применительно к странице детального просмотра элемента это может выглядеть так: 1) в result_modifier.php шаблона компонента детального просмотра сохраняем TIMESTAMP_X в кеше компонента:
Это говорят сеошники. Такое было актуально лет 20 назад, когда сайты по большей части состояли из статических html-страниц, лежащих на диске. То, что сеошники до сих пор говорят об этом, очень ярко характеризует их опыт, знания, кругозор, интеллект и общий уровень развития.
«Да не могут же они!»
|
|||||||||||
|
|
|
|
|||
|
|
|
|
Вопрос всё ещё актуален!
Есть ли какое-нибудь работоспособное решение? |
|
|
|
|
|
|
|
|
|
|
|
В #19 вполне работоспособное решение.
«Да не могут же они!»
|
|
|
|
|
|
Не заводится:
ни так header('Last-Modified: '.gmdate('D, d M Y H:i:s'). ' GMT'); в init.php, dbconn.php ни так, как написано в #19 БУС просто тупо вырезает заголовок last-modified. Попробовал передать Last-Modified1 - все ОК, приходит. Хотя на более старых проектах это работало. Кто-нибудь знает, какой модуль его режет и можно ли это отключить? |
|
|
|
|
|
||||
|
|
|
|||