Перейти к содержимому


Ставим красивую 404 страницу :)

404 not found

  • Вы не можете ответить в тему
Сообщений в теме: 14

#1 Lada

    Продвинутый пользователь

  • Download User
  • PipPipPip
  • 107 сообщений
Репутация: 7
Начинающий
  • ГородЧита

Отправлено 25 January 2015 - 07:12 PM

Для тех, кто не в курсе 404 страница - это страница ошибки, когда чел зашел в ваш магазин и попал на несуществующюю или удаленную страницу, например с уже удаленным товаром. То есть товар удалили, а в поисковиках ссылка на него еще висит..
Вот тогда и появляется эта 404 страница ошибки - Страница не найдена.
И вот, что бы не сильно расстраивать потенциального покупателя - показываем ему красивую страницу с логотипом магазина и информацией - что делать дальше.

Установка:

1. Копируем папку not_found_files в корень
2. В файле core/languages/russian.php
находим:

define('ERROR_404_HTML',

И все, что там написано от ' до '); заменяем на это:

'<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"><HTML><HEAD><TITLE>404 Not Found</TITLE><link rel="stylesheet" type="text/css" href="/not_found_files/default.css" /></HEAD><BODY>

	<div id="wrap"><p class="success_message"></p>
				<div id="container">
			<div id="error_section">
				<img src="/not_found_files/warning-.png"  alt="Warning icon" />
					<h1>Страница не найдена!</h1>
				<div style="clear:both;"></div>
				<div id="separator"></div>
						</div>
					<div id="right_side">
				<p class="description">
				Страница, которую Вы запросили, не существует. Либо она была перемещена, либо удалена. Обратитесь к администрации сайта или попробуйте чуть позже.
				</p>				
			</div>
						<div id="left_side">
				<h2>Вы можете посетить другие страницы:</h2>
					<ul>
					<li><a href="/">Главная</a></li>	
					<li><a href="/category_11.html">Категория 1</a></li>
					<li><a href="/category_12.html">Категория 2</a></li>
					<li><a href="/category_25.html">Категория 3</a></li>
					</ul>
			</div>
			<div style="clear:both;"></div>
			
			<div id="search_and_send_message_button">
			
				<div id="search">
					<div class="logo"><a href="http://ВАШ ДОМЕН"> <img alt="НАЗВАНИЕ МАГАЗИНА" title="НАЗВАНИЕ МАГАЗИНА"  src="/data/ИМЯ ШАБЛОНА/logo.png"></a></div>
				</div>			
			</div>
					<div style="clear:both;"></div>
					</div>		
				<center><div id="container_shadow"></div></center>
		</div>
</BODY></HTML>');
=====================

Здесь не забывайте поправить на свои разделы вместо Категория 1, Категория 2 и т.д.
А так же укажите ИМЯ ШАБЛОНА где лежит логотип магазина, ВАШ ДОМЕН и НАЗВАНИЕ МАГАЗИНА в тегах alt и title

Прикрепленные файлы

  • Прикрепленный файл  not_found_files.rar   103.59К   19 Количество загрузок:
  • Прикрепленный файл  noofound.jpg   73.04К   60 Количество загрузок:

  • 0

#2 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 25 January 2015 - 08:32 PM

Для тех, кто не в курсе 404 страница - это страница ошибки, когда чел зашел в ваш магазин и попал на несуществующюю или удаленную страницу, например с уже удаленным товаром.

В случае shopCMS такая страница может быть двух видов:

1. site.ru/product_123123123.html
Страница попадает под регулярное выражение (шаблон) в .htaccess и HTML-код возвращаемый в этом случае находится там, где Вы и описали.

2. site.ru/produuuuuuuct_123.html или site.ru/12345
Страница не попадает ни под одно регулярное выражение (шаблон) в .htaccess и по прямой ссылке такого файла тоже нет.
Файл с кодом страницы об ошибке задается директивой в .htaccess ErrorDocument 404 /404.html
Соответственно, в файле /404.html надо изменить содержимое либо создать свой файл (c вышеописанным содержимым) и изменить директиву.
  • 2
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#3 Lada

    Продвинутый пользователь

  • Download User
  • PipPipPip
  • 107 сообщений
Репутация: 7
Начинающий
  • ГородЧита

Отправлено 25 January 2015 - 10:12 PM

Совершенно верно.

У меня в .htaccess
прописано -
ErrorDocument 404 /error404.php

А файл error404.php в корне такой:

<html>
<head>
<meta http-equiv="Refresh" content="1;URL=http://ВАШ ДОМЕН.ru"/>
</head>
<body>
<script language="javascript" type="text/javascript">
document.location='/';
</script>
</body>
</html>

То есть при ошибке переводит на главную страницу магазина...
  • 0

#4 shkap

    Пользователь

  • Assistent vsupport.club
  • PipPip
  • 28 сообщений
Репутация: 6
Начинающий

Отправлено 26 January 2015 - 10:58 AM

Спасибо большое за хорошую идею. Давно хотел сделать что-то подобное но руки не доходили. Ещё раз спасибо всё работает.
  • 0

#5 maxruta

    Пользователь

  • Download User
  • PipPip
  • 13 сообщений
Репутация: 0
Начинающий

Отправлено 30 January 2015 - 10:27 PM

Меняю TITLE в core/languages/russian.php в строке ERROR_404_HTML, ничего не меняется, страница 404 с прежним заголовком. Кэш чистила, не помогает.
Это было сделано после неудачной попытки поставить красивую страницу 404 с целью проверить на рукожопный копипаст.
Тоже хочу чтобы всё работало :)

Всё, разобралась. Два варианта - два решения. Спасибо, работает B)
  • 0

#6 Salp

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 218 сообщений
Репутация: 54
Продвинутый

Отправлено 31 January 2015 - 06:51 PM

На мой взгляд, если просто в разделе админки "Менеджер страниц" создать страницу /page_404.html (поменяв в базе ID), то ее можно оформить как угодно красиво и все элементы навигации сайта останутся и дизайн не пострадает. Единственно, что не помешало бы поправить, это отдача 404 ошибки сервером при отображении этой страницы. Для этого в файле show_aux_page.phpshow_aux_page.php добавить условие:
if ($aux_page["aux_page_ID"] == 404) {
header("HTTP/1.0 404 Not Found");
header("HTTP/1.1 404 Not Found");
header("Status: 404 Not Found");
};

также в .htaccess исправить:
ErrorDocument 404 /page_404.html

Очень удобно это делать при установленном модуле "Простенький модуль ЧПУ, версия 2", который сделал badisoft, за что ему огромное спасибо!
В случае, если этот модуль установлен, в index.php изящно меняется следующее условие:
if (replace_from_cpu())
{
ob_start('replace_to_cpu');
require_once 'index_old.php';
}
else
{
$_GET['show_aux_page'] = 404;
ob_start('replace_to_cpu');
require_once 'index_old.php';
}

Пример реализации 404 страницы с корректной отдачей 404 заголовка сервером и минимумом перенаправлений(редиректов) можно посмотреть на сайте у меня в подписи, перейдя по несуществующему адресу, например: /123/ или /page_123.html
(Наверное, данную доработку, лучше было бы выложить в ветке обсуждения самого модуля "Простенький модуль ЧПУ, версия 2.0")

Очевидно, что если этот модуль не установлен, нужно позаботиться чтобы вместо содержимого define('ERROR_404_HTML', из russian.php отдавалась именно эта специально созданная страница /page_404.html
Как это сделать? Скажем, так, что особых сложностей в этом нет.
  • 0

#7 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 01 February 2015 - 03:02 PM

В случае, если этот модуль установлен, в index.php изящно меняется следующее условие:

В случае, если этот модуль установлен, там есть штатная функция Error404(), которая отдает 404-ю ошибку и выводит на экран надпись об отсутствии запрошенной страницы, после чего через 10 секунд автоматически редиректит на главную страницу. Куда проще и правильнее не вносить правки в середину кода модуля, который может меняться, а выбрать один из вариантов:
- целиком поменять содержимое этой функции на свое;
- прописать в функции вместо редиректа на главную страницу редирект на Error_404.html;
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#8 Salp

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 218 сообщений
Репутация: 54
Продвинутый

Отправлено 01 February 2015 - 04:50 PM

- прописать в функции вместо редиректа на главную страницу редирект на Error_404.html;

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

#9 wwwsasa2

    Продвинутый пользователь

  • Download User
  • PipPipPip
  • 53 сообщений
Репутация: -1
Начинающий
  • ГородКиев

Отправлено 22 March 2015 - 10:59 AM

Поставил симпатично выглядит.
  • 0

#10 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 25 March 2015 - 09:12 PM

Вы, главное, не забывайте, что кроме клиента с браузером наперевес есть еще поисковики, которым совершенно наплевать на контент и красоту запрашиваемой ссылки, но которые четко секут, какой код возврата отдан при обращении по ссылке. Если по ЛЮБОЙ ошибочной ссылке будет отдаваться 200 (нормальная страница), а не 404 (страница не существует), то и Гугль, и Яндекс довольно быстро запихают сайт в ГовноСайты.

Я не буду разбирать все перечисленные в этой теме решения в этом свете, мне просто лень (а не лень должно быть как раз тем, кто пытается их использовать), но этот момент надо обязательно учитывать. Поверьте, и Гугль, и Яндекс периодически делают обращения к сайту по несуществующей ссылке. Я это вижу в логах. И результат - 200 или 404 - влияет на выдачу в поиске. Очень сильно влияет. Как мне кажется.

Так что все вышеописанные решения "покажем вместо примитивной 404.html нечто развесистое" обязательно должны сопровождаться хидерами с 404. А оно, увы, есть вовсе не во всех вышеописанных решениях.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#11 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 26 March 2015 - 10:11 PM

Делаем красивое сообщение о не найденной странице (Error 404 - page not found)

1. Копируем файл

addon.php -> core/includes/admin

Файл addon.php нужен ОДИН РАЗ. После первого же захода в админку его можно удалить, если он не удалился сам.


2. Создаем в админке в "менеджере страниц" страницу, которая будет показываться вместо не найденных.
Запоминаем ссылку на эту страницу. Например, это будет page_123.html.


3. Идем в "Общие настройки". Там в самом низу будет настройка "ссылка на страницу для 404-й ошибки".
По умолчанию там 404.html, меняем на page_123.html.


4. В файле .htaccess меняем

ErrorDocument 404 /404.html

на

ErrorDocument 404 /page_123.html


5. В файлах

core/includes/advanced_search_in_category.php
core/includes/category.php
core/includes/category_search_result.php
core/includes/news.php
core/includes/order_history.php
core/includes/product_detailed.php
core/includes/product_discussion.php
core/includes/show_aux_page.php

перед (или вместо)


die(ERROR_404_HTML);


вставляем


# BEGIN Error_404
die(file_get_contents(CONF_FULL_SHOP_URL.CONF_ERROR_404));
# END Error_404



Все. Теперь при заходе на не существующую страницу будет отдан код 404 и HTML-контент со страницей page_123.html

PS. Для нормальной работы необходимо, чтобы:
- строка "php_value allow_url_fopen 1" в .htaccess действительно выполнялась, т.е. функция file_get_contents могла работать с URL-ами
- сайт был доступен "сам для себя", т.е. функция file_get_contents могла получить содержимое http://site.ru/page_123.html

Также не помешает средствами апача запретить доступ к страницам page_123.html и index.php?show_aux_page=123 со всех IP-адресов кроме хостера, т.е. чтобы "скачать" эту страницу мог только сам сервер (сайт).
Нужно это для того, чтобы страница ошибки не была доступна поисковикам как обычная нормальная страница.

См. http://cpu.badisoft.ru/12345 - страница Error_404 притырена с http://csomsk.ru :).

Прикрепленные файлы

  • Прикрепленный файл  addon.php   547байт   19 Количество загрузок:

  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#12 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 04 April 2015 - 12:40 AM

Вначале так и сделал. но не понравилось. Двойной редирект, использование для редиректа ява скрипта, дизайн страницы отличается от всего сайта (не виден сразу каталог)...

Ну, если уж хочется совсем без редиректов, то можно так:

function Error404 ()
{
header("HTTP/1.0 404 Not Found");
header("HTTP/1.1 404 Not Found");
header("Status: 404 Not Found");
header("Content-Type: text/html;charset=windows-1251");
die(file_get_contents('http://site.ru/Error-404.html'));
}

Где Error-404.html это ЧПУ какой-нибудь page_123.html с сообщением об отсутствии такой страницы.
а сама страница может быть, например, такой:

<div><b>Страница не найдена</b> <br>
<br>
Запрашиваемая Вами страница, возможно, была переименована или удалена.<br>
Попробуйте воспользоваться &quot;живым&quot; поиском.<br><br>
Через <span id="redirect_timer">0</span>сек Вы будете перенаправлены на главную страницу.</div>
<script>
function CountDown(){
var now=new Date();
now=Date.parse(now)/1000;
var x=parseInt(counts-(now-start),10);
document.getElementById('redirect_timer').innerHTML = x;
if (x>0) setTimeout('CountDown()', 100);
else location.href='/';
}
var start=new Date();
start=Date.parse(start)/1000;
var counts=31; // время ожидания в секундах
setTimeout('CountDown()',100);
</script>

  • 1
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#13 Salp

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 218 сообщений
Репутация: 54
Продвинутый

Отправлено 04 April 2015 - 04:09 PM

Еще была идея под 404-й страницей показывать похожие страницы товаров, используя поиск по сайту на основе информации из refer от поисковика. Но гугль перешел на https, да и реализация довольно сложная, а пользы не так много. Так и осталось только идеей.
  • 0

#14 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 04 April 2015 - 06:24 PM

Еще была идея под 404-й страницей показывать похожие страницы товаров

В общем случае не покатит. Понятно, что для страницы типа /kepka-nomir-sorok без проблем найдется ближайшая похожая (и правильная) страница /kepka-nomer-sorok. В PHP есть несколько функций вычисления "критерия похожести" по разным алгоритмам. Всякие там расстояния Левенштейна и прочее. Тем более, что текст английский, а с ним они работают куда лучше. И показывать на странице ошибки ссылки на НЕСКОЛЬКО самых близких. Но вот как вычислять ближайшие похожие для /product_123.html, где "123" - неверно? :)
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#15 Salp

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 218 сообщений
Репутация: 54
Продвинутый

Отправлено 04 April 2015 - 07:46 PM

Но вот как вычислять ближайшие похожие для /product_123.html, где "123" - неверно? :)

Я немного не об этом. Похожий запрошенный урл без чпу это, конечно, никуда не годится. Но можно определить по реферу именно переход из поисковой системы, распарсить его (Яндекс передает сам поисковый запрос по-русски), взять самое длинное слово (или два) и отобразить в результатах поиска внизу 404 странице под заголовком "Возможно, Вы это искали:". Кроме этого, это даст возможность создать блок "У нас искали" и отобразить в нем поисковые запросы, по которым были переходы на сайт.
  • 0