Опубликовано: 11 марта, 2015
Обновлено: 28 февраля, 2017
Ошибка 404 возникает при заходе пользователя на страницу, которая не существует, удалена или перенесена по другому адресу.
Есть несколько вариантов настройки данной страницы:
- Использовать 404 страницу, настроенную в шаблоне (файл error.php)
- Редирект со всех страниц с 404 ошибкой на главную страницу магазина
- Создание собственной страницы с 404 ошибкой
В большинстве шаблонов в корневой папке находится файл error.php. В нем настроен вид страницы с 404 ошибкой.
Если шаблон хороший, то можно использовать его, но я не сторонник такого подхода. Во-первых, скорее всего, пользователь не увидит на странице привычную структуру магазина (с категориями, формой поиска и т.д.); во-вторых, дизайн страницы наверняка придется править.
Редирект на главную страницу
Это самый простой вариант. При попадании пользователя на несуществующую страницу автоматически будет срабатывать редирект на главную.
Для включения данной опции в Virtuemart > Настройки > Внешний вид нужно активировать Включить в VirtueMart обработку 404 ошибки.

Собственная страницы с 404 ошибкой
Самый правильный, на мой взгляд, вариант.
В менеджере материалов создаем новый материал с информацией об ошибке. Присваиваем категорию Uncategorized (Без категории).

Далее создаем новый пункт меню с типом Материал, выбираем созданный ранее материал.
Из поля Ссылка копируем адрес ссылки.

В корневую папку шаблона копируем файл templatessystemerror.php.
Сразу после
|
defined(‘_JEXEC’) or die; |
Вставляем
|
if (($this->error->getCode()) == ‘404’) { header(‘Location: /index.php?option=com_content&view=article&id=78’); exit; } |
Не забываем заменить адрес ссылки на свой.
В результате страница с 404 ошибкой будет иметь нужный нам вид.

Похожие статьи :
- Панель переключения валют VirtueMart 3
- Быстрое добавление пунктов меню для категорий Virtuemart
- Слайдер производителей virtuemart 3
- Мультизагрузка изображений товара в virtuemart 3, 2
- Вставка youtube видео в настраиваемое поле virtuemart
0 Пользователей и 1 Гость просматривают эту тему.
- 11 Ответов
- 4027 Просмотров

Здравствуйте!
Страница 404 отдает код 200ок.
Если ввести тупо абракадабру, то даже 404 не выдает — перенаправляет на главную страницу сайта (главная страница каталога товаров virtuemart).
Если ввести тупо абракадабру, то даже 404 не выдает — перенаправляет на главную страницу сайта (главная страница каталога товаров virtuemart).
Какая версия? Если >=2, в настройках смотрели? — http://clip2net.com/s/3yUA3y9
Записан
Веб-разработка: заказ. Только новая объемная разработка. Качественно, дорого.
Версия — 2.0.—. В настройках управления страницей 404 нет.
Если версия очень старая, раньше не было. Вот тема.
Если нет возможности обновиться,
скачайте новый, посмотрите как реализовано, допишите.
Записан
Веб-разработка: заказ. Только новая объемная разработка. Качественно, дорого.
Вот у меня версия Joomla! 3.5.1 и VirtueMart 3.0.16 так же в настройках стоит Включить в VirtueMart обработку 404 ошибки
а страница 404 _https://lik-astana.kz/404.html_ отдает ответ 200 проверял тут http://wwhois.ru/response.php .
Да и в htaccess прописано ErrorDocument 404 /404.html и сам код error.php рабочий
<?php
defined('JPATH_BASE') or die();
if($this->error->getCode()==404){
header("HTTP/1.0 404 Not Found");
header("HTTP/1.1 404 Not Found");
header("Status: 404 Not Found");
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, JURI::base().'/404.html');
$data = curl_exec($ch);
curl_close($ch);
echo $data;
die();
}
?>
в чем проблема не могу понять может что то посоветуете
Та же проблема на VM 3.0.16 и Joomla 3.6.2! VirtueMart не отдает страницу ошибки 404, а отдает ответ 200 при вводе неправильного адреса товара или категории. Включал/отключал в VirtueMart обработку 404 ошибки — не помогает. Спецы, дайте совет дельный, пожалуйста!
Та же проблема на VM 3.0.16 и Joomla 3.6.2! VirtueMart не отдает страницу ошибки 404, а отдает ответ 200 при вводе неправильного адреса товара или категории. Включал/отключал в VirtueMart обработку 404 ошибки — не помогает. Спецы, дайте совет дельный, пожалуйста!
Есть решение ?
Та же проблема!
Для всех страниц, кроме каталога, настойку 404 выполнила так:
1. Создала материал 404 с дефолтным текстом без категории.
2. Создала пункт меню 404 (не опубликован, скрыт), подтянула к нему материал 404
3. Скопировала адрес моего материал 404 , у меня в формате /index.php?option=com_content&view=article&id=2
4. В файле error.php, который находится в папке templates/system стерла всё содержимое и вместо этого написала:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" XML : lang="<? php echo $this->language; ?>" lang="<?php echo $this-> language; ?>" dir="<? php echo $this->direction; ?>">
<head>
</head>
<body>
<?php
if ($this->_error->get('code') == '404') {
header("HTTP/1.0 404 Not Found");
header('Location: /index.php?option=com_content&view=article&id=2');
exit;
}
?>
</body>
</html>
5. этот же error.php скопировала в /templates/мой-шаблон/
РЕЗУЛЬТАТ:
Работает, выводит мою страницу 404 для неверных урлов сайта. кроме урлов VirtueMart.
НО страница 404 отдает код 200 ок.
Как решить? И как сделать для VirtueMart?
« Последнее редактирование: 29.12.2016, 14:47:09 от kovshenya »
Записан
Как я понял при попытки вывести страницу 404 с VirtueMart не предусмотрено разработчиком.
Так как код с файла error.php рабочий и при Joomla урлах работает а при VirtueMart — овских нет а просто редиректит на главную и это скорее и есть решение разработчиков.
Как я понял при попытки вывести страницу 404 с VirtueMart не предусмотрено разработчиком.
Так как код с файла error.php рабочий и при Joomla урлах работает а при VirtueMart — овских нет а просто редиректит на главную и это скорее и есть решение разработчиков.
Спасибо!
С VirtueMart все понятно.
Только что решила проблему, когда страница 404 отдает код 200 (возврат HTTP-кода 200 вместо 404 Not Found) так:
Вместо редиректа через заголовок Location, перенаправляю «свою страницу 404» браузеру, то есть:
В файле error.php в /templates/мой-шаблон/ сделала так:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $this->language; ?>" lang="<?php echo $this->language; ?>" dir="<?php echo $this->direction; ?>">
<head>
</head>
<body>
<?php
if ($this->_error->get('code') == '404') {
header("HTTP/1.0 404 Not Found");
$url=JURI::root()."index.php?option=com_content&view=article&id=2";
$data = file_get_contents($url) or die("Cannot open URL");
echo $data;
}
?>
</body>
</html>
И ура:
HTTP/1.1 404 Not Found
Последний вирт 3.2 — отдает код 200.
Есть решения без хаков?
Какая версия? Если >=2, в настройках смотрели? — http://clip2net.com/s/3yUA3y9
Хоть картинка уже не доступна, но я понял о какой настройке идёт речь.
И это спасло в моей ситуации! Спасибо!
С включенной обработкой ошибки 404 VirtueMart создавал огромную нагрузку в базе данных, делал циклические запросы к БД. Хостинг — не, не ругался, а просто мило выключил мне возможность post-запросов
и ещё несколько необходимых для работы моментов.
Пришлось что-то решать. Когда выключил обработку ошибки 404 в конфиге, проблема с огромной нагрузкой исчезла (надеюсь, навсегда, тьфу-тьфу)
Думаю, там что-то не в порядке с роутингом при неверных url, особенно на страницах, связанных с производителями.
На днях заказчик обратился со вполне понятным заданием. Нужно было создать свою 404 страницу, поскольку при вводе неверного адреса открывалась главная, а к этому, по слухам, не очень благосклонно относятся поисковые системы
На первый взгляд, задача простая и описана на официальном сайте Joomla
https://docs.joomla.org/Creating_a_Custom_404_Error_Page/ru
Только вот незадача. Если в общих настройках Joomla включен SEF, то обработка 404 происходит весьма своеобразно и предлагаемый по ссылке рецепт срабатывает далеко не всегда.
Симптомы некорректно работающего сайта
Как работал сайт заказчика?
-
При вводе неверного адреса на странице категории, открывалось содержимое главной страницы сайта. При этом адрес страницы не менялся
-
При вводе неверного адреса на странице товара открывался контент категории, к которой относился товар. При этом адрес страницы не менялся
Почему необходимо решать проблему
Признаюсь, я никогда серьезно не задумывался над 404 ошибкой в Joomla и над механизмом работы SEF адресов в целом.
При тестировании на локальном компьютере, где не был установлен Virtuemart, обнаружил, что работа происходит аналогично. Также, как и на сайте заказчика
Затираем часть адреса и видим, что отображается главная страница, либо категория, к которой относится материал, либо вообще ничего не происходит. Контент остается прежним.
С точки зрения поисковой системы получается, что существует миллион вариантов адреса одной и той же страницы. И если какой нибудь доброжелатель разместит на своем сайте ссылку на вашу страничку, где будет ошибка в адресе, поисковики спокойно её проглотят. И могут в поисковой выдаче выдавать страницу по новому адресу
Конечно, есть мощные компоненты, которые с тем или иным успехом сражаются с дублями страниц и решают множество задач для правильного представления сайта в поисковых системах. Однако, как показывает опыт, лучше стараться избегать подобных комбайнов по обработке адресов страниц. Это создает немало проблем, особенно с таким компонентом, как Virtuemart
Анализ ситуации
Понять, что происходит с точки зрения системы можно проанализировав переменные запроса Joomla
Чтобы не вываливать на экран все переменные запроса Joomla, вставим следующие строчки, например, в файл index.php шаблона сайта
Данный фрагмент кода позволит нам вывести на экран массив переменных, содержащийся в адресной строке:
$uri = JURI::getInstance();
$appsite = JFactory::getApplication('site');
$router = $appsite->getRouter();
$getParams = $router->parse($uri);
echo '<pre>'; print_r ($getParams); echo '</pre>';
При вводе неверного адреса мы увидим, что никакой 404 ошибкой и не пахнет.
Система благополучно отправляет данные, а выводит их исходя из некой никому неизвестной логики.
К примеру:
- Если неверный адрес введен на странице материала стандартного com_content, то , собственно, ничего и не меняется кроме содержимого адресной строки браузера.
- Если неверный адрес введен на странице категории, то содержимое сайта меняется на содержимое главной страницы.
Какую то закономерность вычислить мне было сложно, да это и не нужно.
Решение проблемы
Те, кто изучал вопрос , знают: у каждого компонента в Joomla есть свой роутер, где исходя из получаемых данных формируется SEF адрес страницы.
Подробнее о роутинге можно почитать на этой страничке:
http://inet-reklama.com/blog/joomla/routing-v-joomla-jroute.html
Для себя я задачу сформировал так:
Если содержимое адресной строки не соответствуют тому, что показывают переменные запроса, то осуществляем редирект на 404 страницу.
Чтобы решение было относительно универсальным и его можно было использовать многократно, я написал небольшой плагин.
Называется он redirect_virtuemart
Скачать плагин можно по ссылке ниже:
https://sitogon.ru/files/plg_redirect_virtuemart.zip
Как работает плагин?
В настройках плагина выбирается статья из менеджера материалов Joomla. На нее будет осуществляться редирект при неверном вводе адреса страницы.

Включенный плагин отслеживает соответствие адреса страницы переменным, которые отдает система. Если соответствие нарушено, то осуществляется редирект.
В каких случаях не будет работать плагин
В начале статьи я давал ссылку на документацию с официального сайта Joomla, где говорилось о том, как создать 404 страницу
Так вот игнорировать эту документацию не стоит, поскольку плагин не обрабатывает 404 ошибку. Он просто ищет несоответствие получаемым из Joomla данным и текущего адреса страницы.
Если в общих настройках вашего сайта параметр «Добавлять суффикс к URL» включен в положение «ДА», то адрес ваших страничек будет таким:
http://localhost/magazin.html
Если убрать пару символов из «html», то мы получим в адресной строке следующий адрес:
http://localhost/magazin.ht
И Joomla честно обработает такой адрес, как 404 ошибку. В данном случае редирект необходимо осуществлять методом, который описан в документации на официальном сайте Joomla
Если на странице товара Virtuemart затереть часть адреса, в которой расположен алиас товара, то произойдет редирект на страницу категории
Если на странице материала менеджера материалов затереть часть адреса, но данному материалу при этом не соответствует ни один пункт меню, то сработает стандартный обработчик 404 ошибки
Плагин осуществляет проверку адреса без дополнительных параметров. Если адрес будет выглядеть так:
http://localhost/redaktirovat-profil.html?view=login
То все, что идет после вопросительного знака учитываться в сравнении не будет
Плагин не осуществляет работу для компонента com_users
Breadcrumbs (хлебные крошки) и Virtuemart
Когда плагин был практически доделан, я обнаружил одну странность. Адрес категории Virtuemart отличался, если заходить через меню или если заходить через клик в модуле Breadcrumbs. Это же касалось и страницы производителей
Пришлось добавить редирект от «неправильного» адреса Breadcrumbs, в тот, который формируется пунктом меню
Заключение
Плагин создавался под конкретный сайт и я не несу никаких гарантий, что он будет корректно работать на вашем. Однако с интересом выслушаю отзывы о его работе и комментарии о его поведении, особенно это касается работы с другими компонентами, поскольку работа плагина проверялась только на Virtuemart и стандартном менеджере материалов
Добрые день всем. У кого есть идеи по поводу работы 404 страницы.
Изначально на сайте http://kemaclub.ru/ не было страницы 404, всё что не введёшь вело либо на каталог либо на главную страницу.
Сделал 404 страницу и загрузил её в шаблон, но ничего не отрабатывало.
Далее решил капнуть глубже -> /components/com_virtuemart/router.php
Данный файл изначально был:
| PHP | ||
|
Потом заменил некоторые строки:
| PHP | ||
|
Теперь если ввести http://kemaclub.ru/katalog/sdg то ничего не срабатывает, если же просто написать http://kemaclub.ru/dfgf то выдаёт 404 ошибку.
Тогда я решил сделать по другому. Откатил файл до прежнего состояния и изменил строки:
| PHP | ||
|
на:
| PHP | ||
|
При этом варианте стало отрабатывать 404 и на главной и в каталоге, но когда я перехожу на страницу 3 уровня, оно мне её выдаёт как 404, хотя эта страницу доступна была при другом варианте редактирования.
Может кто сталкивался или у кого есть решение, так как в joomla не эксперт, хотелось узнать вашего мнения.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
-
Offline
igordyak67
Недавно здесь
- Регистрация:
- 30.09.2013
- Сообщения:
- 2
- Симпатии:
- 0
- Пол:
- Мужской
Уважаемые господа!
Перерыл ВСЁ! Требуется помощь, так как в интернете полного решения вопроса нет.
Суть в том, что в VM2 в связке с Joomla 2.5 изначально не выдавалась ошибка 404 при вводе некоректных URL типа: site.ru/asfasff, а перенаправляло на главную. С категориями товаров и главной страницей, вроде задачу решил путём вставки:
в /components/com_virtuemart/virtuemart.php, на строке 111, вместо
-
$mainframe->redirect(JRoute::_ (‘index.php?option=com_virtuemart&view=virtuemart’, FALSE));
Данный код:
-
JError::raise(E_ERROR,’404′,’Not found’);
Но возник главный вопрос:
ЕСЛИ ТОВАР БЫЛ УДАЛЁН, ТО ПРИ ПЕРЕХОДЕ ПО ЕГО URL ССЫЛКА ПРЕОБРАЗУЕТСЯ В
site.ru/название_категории?error=404Всё бы ничего, но мало того,что не выдаётся страница ошибки 404, поисковик получает неправильный сигнал 303. Начал смотреть решения в интернете, но таковых не оказалось, только поверхностно разбирались темы.
Вопрос с выдачей страницы error 404 решил, но сигнал всё равно передаётся неправильный.
Сделал следующее:В templatesшаблонhtmlcom_virtuemartcategorydefault.php
Добавил после строки defined (‘_JEXEC’) or die(‘Restricted access’):-
$input = JFactory::getApplication()->input;
-
if($input->getInt(‘error’, 0) === 404)
-
JError::raise(E_ERROR,’404′,’Not found’);
Так как программирование знаю поверхностно, даже это далось с большим трудом. Моя задача всё-таки заставить выдавать сигнал поисковику error 404, при переходе на удалённый товар.
ПРИЛАГАЮ ИЗОБРАЖЕНИЕ С ТАКОЙ ЖЕ ПРОБЛЕМОЙ. На нём видно, что по ссылке /женская_одежда/штаны?error=404 находился товар, который ранее располагался по адресу /женская_одежда/штаны/товар
Форумчане, возможно кто-то сталкивался с таким вопросом, я уже потерял надежду решить его.
-

Offline
OlegK
Russian Joomla! Team
Команда форума
⇒ Профи ⇐- Регистрация:
- 17.01.2011
- Сообщения:
- 7 813
- Симпатии:
- 768
- Пол:
- Мужской
Есть пункт меню на главную Вирт ?
-
Offline
igordyak67
Недавно здесь
- Регистрация:
- 30.09.2013
- Сообщения:
- 2
- Симпатии:
- 0
- Пол:
- Мужской
Virtuemart 2 находится на главной странице.
-

Offline
OlegM
Russian Joomla! Team
Команда форума- Регистрация:
- 12.04.2007
- Сообщения:
- 4 311
- Симпатии:
- 375
- Пол:
- Мужской
Не пробовал добавить
-
header(‘HTTP/1.0 404 Not Found’);
?
Поделиться этой страницей

-

Mos
Cкладчик- Регистрация:
- 23 июн 2015
- Сообщения:
- 12
- Симпатии:
- 1
Скриншот ошибки :
![[IMG]](http://s01.geekpic.net/di-F1O06I.png)
![[IMG]](http://s01.geekpic.net/di-54Z82R.png)
Максимально подробное описание ошибки : Установил шаблон Шаблон JS MegaDeal II v1.5. Беды не знал, правил его спокойно, когда было свободное время. Полностью работал. Пока пару дней назад не обнаружил, что перестали оформляться заказы. До этой стадии все проходит нормально: тестовые товары уходят в корзину и сама корзина функционирует отлично, но стоит кликнуть на кнопку «Подтвердить заказ», как выкидывает на страницу со 404 ошибкой.
Что я пробовал:
1. Менял PHP с 5. 3.10 до 7. Т.е. перебрал все версии — ошибка осталась.
2. Отключал ЧПУ
3. Где-то вычитал, что проблема может быть в AcyMailing или в том, что не отправляется письмо заказчику, отчего выкидывает ошибку. Отключил все плагины, связанные с AcyMailing. Бесполезно. Кстати, в настройках Сервера тестовое письмо благополучно от имени веб-мастера отправляется.
4. Рыл дальше. Akeeb-ом сделал бэкап, перенес с хостинга на отдельный vps, развернул там — ошибка осталась.
5. Скачал шаблон со складчины еще раз. Развернул квикстартом. Открыл страницу с чистым, голым шаблоном и, о, чудо — все равно НЕ РАБОТАЕТ.
6. Развернул этот же чистый шаблон на таком же чистом, 100% рабочем VPS. И там тоже не работает.Вопрос очень важный и очень странный. Помогите, пожалуйста.
Название хостинга или локального сервера : проверялось на хостинге, а так же на VPS от reg.ru
Версия php : в данный момент 5.6.14
Бэкап:
Вот сам бета-сайт с несколькими тестовыми товарами (доступны в категории «Прочие продукты питания»):
Вот логин и пароль к нему:
-

Artur
Тех. поддержка- Регистрация:
- 25 дек 2015
- Сообщения:
- 898
- Симпатии:
- 139
Вы все грамотно сделали, получается что в шаблоне изначально ошибка, попробую вечером поставить и потестировать.
-

Mos
Cкладчик- Регистрация:
- 23 июн 2015
- Сообщения:
- 12
- Симпатии:
- 1
Спасибо за ответ. Буду ждать вашего приговора по шаблону.
Кстати, несмотря на то, что выкидывает на страницу с ошибкой, заказы в Vitruemart все равно прилетают. Т.е. по логике банально не работает редирект на страницу с подтверждением об успехе операции.
-

Mos
Cкладчик- Регистрация:
- 23 июн 2015
- Сообщения:
- 12
- Симпатии:
- 1
Добрый день!
Есть какая-нибудь информация или идеи, что можно еще сделать?
-

Mos
Cкладчик- Регистрация:
- 23 июн 2015
- Сообщения:
- 12
- Симпатии:
- 1
Вопрос как никогда актуален до сих пор. Пробую и так и эдак. Может, хоть что-то посоветуете? Брать другой шаблон? Но это работы столько, что представить трудно.
-

Artur
Тех. поддержка- Регистрация:
- 25 дек 2015
- Сообщения:
- 898
- Симпатии:
- 139
прежде чем установлю бекап у меня вопрос какая версия джумлы у вас,
у virtuemart 3.0.14. проблемы с джумла 3,5,1
попробуйте установит этот фикс https://cloud.mail.ru/public/Dcw6/ca32tceiS
он ставиться через менеджер пасширенийПоследнее редактирование: 31 июл 2016
-

Mos
Cкладчик- Регистрация:
- 23 июн 2015
- Сообщения:
- 12
- Симпатии:
- 1
Спасибо Вам огромное. Фикса работает. На самом деле сработало и простое обновление VM на 3.0.16 и Joomla 3.6. Однако после этого не все модули стали вести себя адекватно. Например, SP Page Builder потребовал PRO-версию, превратившись во Free.
Перед тем, как создавать обращение на форум, я читал про возможную несовместимость vm 3.0.14 c J3.5.1, однако подумал, что это не мой случай, ведь зачем тогда квикстарт состоял именно из такого набора. Да и работало ведь изначально.
-

Artur
Тех. поддержка- Регистрация:
- 25 дек 2015
- Сообщения:
- 898
- Симпатии:
- 139