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

Здравствуйте!
Страница 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 и стандартном менеджере материалов
Topic: Virtuemart great problem with 404 pages (Read 9524 times)
Hello everybody. I just noticed a great problem with virtuemart. If you choose the home page type any of Virtuemart pages and type some nonsense, like site.com/asdasdasdasd — that won’t show 404 page. And that problem appears in all virtuemart pages, including products. Аrе there any fixes?
I have checked in all my sites with virtuemart. All sites have the same problem.. 

Logged

Logged
Greetings. In this topic and all forum there are many ways to get around the problem. No some hacks and fixes. I would like to fix finally this problem.

Logged
I’m not good at php. Is there a code like «If the url is wrong (not a virtuemart category)» or something similar?

Logged
where do u end up now when there is a non existing page??

Logged
GJC Web Design
VirtueMart and Joomla Developers — php developers https://www.gjcwebdesign.com
VM3 AusPost Shipping Plugin — e-go Shipping Plugin — VM3 Postcode Shipping Plugin — Radius Shipping Plugin — VM3 NZ Post Shipping Plugin — AusPost Estimator
Samport Payment Plugin — EcomMerchant Payment Plugin — ccBill payment Plugin
VM2 Product Lock Extension — VM2 Preconfig Adresses Extension — TaxCloud USA Taxes Plugin — Virtuemart Product Review Component
https://extensions.joomla.org/profile/profile/details/67210
Contact for any VirtueMart or Joomla development & customisation
If i go to somearticle/asdasdasd — that displays an error 404, fage not found.
But when i go to some VM category and type fake url, like :site.com/vmcategory/asdasdasd — that redirects me to site.ru/vmcategory.html.
When i type some fake url like site.com/asdasdasd — that displays the page without some redirects and error — 200 OK, because my home page type is choosed «Virtuemart category». When i choose home page type to some joomla material and type site.com/qweqweqwe — that displays error page 404, as it should.
So i have another question : where i can find the code which is responsible for this redirect to category?

Logged
is this selected?
Enable VirtueMart 404 error handling ? VM config

Logged
GJC Web Design
VirtueMart and Joomla Developers — php developers https://www.gjcwebdesign.com
VM3 AusPost Shipping Plugin — e-go Shipping Plugin — VM3 Postcode Shipping Plugin — Radius Shipping Plugin — VM3 NZ Post Shipping Plugin — AusPost Estimator
Samport Payment Plugin — EcomMerchant Payment Plugin — ccBill payment Plugin
VM2 Product Lock Extension — VM2 Preconfig Adresses Extension — TaxCloud USA Taxes Plugin — Virtuemart Product Review Component
https://extensions.joomla.org/profile/profile/details/67210
Contact for any VirtueMart or Joomla development & customisation
Yeah, of course. But when i go to components/com_virtuemart/virtuemart.php after
if (VmConfig::get('handle_404',1)) { i write
echo "qwerty"; and that does not display «qwerty in category. So i think, that this option in VM is not working.

Logged
just tested
if I uncheck ‘Enable VirtueMart 404 error handling’ and try a non existent VM page I get a standard Joomla 404
If I check it , sef on, try a none existent product I am redirected to the VM frontpage or if the cat slug is in the url to that cat
if I try a non existent cat page (sef url) I get a std. 404
if I use non SEF urls to non existent cats I go the VM frontpage
So for me it works
clean J3.6.2/VM3.0.16
trying print ‘Debug Line ‘.__LINE__.’ 404 <pre>’; print_r (VmConfig::get(‘handle_404’)); print «</pre><br />n»; it does change with the admin change

Logged
GJC Web Design
VirtueMart and Joomla Developers — php developers https://www.gjcwebdesign.com
VM3 AusPost Shipping Plugin — e-go Shipping Plugin — VM3 Postcode Shipping Plugin — Radius Shipping Plugin — VM3 NZ Post Shipping Plugin — AusPost Estimator
Samport Payment Plugin — EcomMerchant Payment Plugin — ccBill payment Plugin
VM2 Product Lock Extension — VM2 Preconfig Adresses Extension — TaxCloud USA Taxes Plugin — Virtuemart Product Review Component
https://extensions.joomla.org/profile/profile/details/67210
Contact for any VirtueMart or Joomla development & customisation
if I try a non existent cat page (sef url) I get a std. 404
BUT! not when any vmart alias is before it
for example. if your shop alias is
/shop
then you type in
/shop/axnlksdlklkfjkldgfj you will NOT get a 404
what you get is /shop display, BECAUSE vmart/ joomla has NO idea what the «view» is supposed to be to even know if its a fake category.
& OP,
This really does not create a SEO problem. The canonical url is in the head of the doc.

Logged
Yeah, of course. But when i go to components/com_virtuemart/virtuemart.php after
if (VmConfig::get('handle_404',1)) {i writeecho "qwerty";and that does not display «qwerty in category. So i think, that this option in VM is not working.
because you need to change it in
views/category/view.html.php
if (VmConfig::get(‘handle_404’,1)) {
$app->redirect(JRoute::_(‘index.php?option=com_virtuemart’ . $categoryLink . ‘&error=404’, FALSE));
} else {
JError::raise(E_ERROR,’404′,’Not found’);
}
BUT! this will not work UNLESS joomla knows your in the vmart component

Logged
I’m not good at php. Is there a code like «If the url is wrong (not a virtuemart category)» or something similar?
yes this can be done ,
BUT! you have to think.
Someone who uses google adwords, and google gives additional tracking parameters, should they 404?

Logged
Hello everybody. I just noticed a great problem with virtuemart. If you choose the home page type any of Virtuemart pages and type some nonsense, like site.com/asdasdasdasd — that won’t show 404 page. And that problem appears in all virtuemart pages, including products. Аrе there any fixes?
I have checked in all my sites with virtuemart. All sites have the same problem..
This is not an error, there exists unlimited urls for any canonical url. Because when you add something to a valid url, it is just handled as parameter. When the parameter is not used within the view, then the parameter is not without any effect => «unlimited» valid urls and that is not an error, that is by design.
Searchengines handle that completly correct. 404 is actually a code for an not valid link, but our job is to assure that there are no non valid links.
Remind the old times, when you wrote a page with static html, and you used a link to a nonexisting file, for that you have the 404. But in a CMS, you always open the /index.php, which is always valid.
So even our simulation of 404 is nonsense, it should be 303 or so, actually.

Logged
Should I fix your bug, please support the VirtueMart project and become a member
______________________________________
Extensions approved by the core team: http://extensions.virtuemart.net/
Thank you very much for replies.
Ok, now i understand, that this is not a problem, and everything works properly.
My default site page is selected virtuemart category page. So when i go to site.com/asdasdasd — that does not redirect me to site.com, but there is a canonical link. So i think this would not create a problem with seo.
So lets summarize.
When the default site page is choosed some of VM pages:
- site.com/asdasdasd will be opened with 200 without any redirects, but there will be a canonical link to your site.com
- site.com/vmcategory/asdasdasd will redirect you with 301 to site.com/vmcategory
- site.com/vmcategory/vmproduct/asdasdasd will either redirect you to last visited category page, from where you go to the product page, or if you open the product page directly — will be opend with 200, but redirect you to product category page.
- site.com/vmcategory/asdasd/vmprouct will redirect with 301 either to category page, or to product page.
When the defaul site page is choosed some joomla standart page, for example some material, than site.com/asdasd will show page 404, but virtuemart pages will work as with defaul vm page.
In spite of unchecked «Enable VirtueMart 404 error handling», the VM will always redirect and does not show the 404 page. I Don’t know why, this does not work for me, tried to uncheck this function.Ineffectually.
J3.6.0 VM 3.0.16
Also i use a plugin «Canonical links all in one», there is an option: Permanent Redirect to the canonical link. With this option all product pages correctly redirect to canonical link, but «site.com/asdasd» does not redirect to canonical «site.com», i don’t know why 

Logged
I think we dont have a canonical for «home».

Logged
Should I fix your bug, please support the VirtueMart project and become a member
______________________________________
Extensions approved by the core team: http://extensions.virtuemart.net/
