Joomla + Virtuemart + 404 страница

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


На первый взгляд, задача простая и описана на официальном сайте Joomla

https://docs.joomla.org/Creating_a_Custom_404_Error_Page/ru

Только вот незадача. Если в общих настройках Joomla включен SEF, то обработка 404 происходит весьма своеобразно и предлагаемый по ссылке рецепт срабатывает далеко не всегда.
 

Симптомы некорректно работающего сайта

Как работал сайт заказчика?

 

  1. При вводе неверного адреса на странице категории, открывалось содержимое главной страницы сайта. При этом адрес страницы не менялся

  2. При вводе неверного адреса на странице товара открывался контент категории, к которой относился товар. При этом адрес страницы не менялся
     

Почему необходимо решать проблему

Признаюсь, я никогда серьезно не задумывался над 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


 

В каких случаях не будет редиректа на 404 страницу


Если на странице товара Virtuemart затереть часть адреса, в которой расположен алиас товара, то произойдет редирект на страницу категории


Если на странице материала менеджера материалов затереть часть адреса, но данному материалу при этом не соответствует ни один пункт меню, то сработает стандартный обработчик 404 ошибки

Плагин осуществляет проверку адреса без дополнительных параметров. Если адрес будет выглядеть так:
 

http://localhost/redaktirovat-profil.html?view=login
 

То все, что идет после вопросительного знака учитываться в сравнении не будет
 

Плагин не осуществляет работу для компонента com_users

 

Breadcrumbs (хлебные крошки) и Virtuemart


Когда плагин был практически доделан, я обнаружил одну странность. Адрес категории Virtuemart отличался, если заходить через меню или если заходить через клик в модуле Breadcrumbs. Это же касалось и страницы производителей

Пришлось добавить редирект от «неправильного» адреса Breadcrumbs, в тот, который формируется пунктом меню
 

Заключение

Плагин создавался под конкретный сайт и я не несу никаких гарантий, что он будет корректно работать на вашем. Однако с интересом выслушаю отзывы о его работе и комментарии о его поведении, особенно это касается работы с другими компонентами, поскольку работа плагина проверялась только на Virtuemart и стандартном менеджере материалов

 
 

ПОЛИТИКА КОНФИДЕНЦИАЛЬНОСТИ ПЕРСОНАЛЬНЫХ ДАННЫХ

Настоящая Политика конфиденциальности персональных данных (далее – Политика конфиденциальности) действует в отношении всей информации, которую сайт Сайтогон, (далее – Сайт) расположенный на доменном имени sitogon.ru (а также его субдоменах), может получить о Пользователе во время использования сайта sitogon.ru (а также его субдоменов), его программ и его продуктов.

1. Определение терминов

1.1 В настоящей Политике конфиденциальности используются следующие термины:

1.1.1. «Администрация сайта» (далее – Администрация) – действующая в лице индивидуального предпринимателя Егорова В.К., который организует и (или) осуществляет обработку персональных данных, а также определяет цели обработки персональных данных, состав персональных данных, подлежащих обработке, действия (операции), совершаемые с персональными данными.

1.1.2. «Персональные данные» - любая информация, относящаяся к прямо или косвенно определенному, или определяемому физическому лицу (субъекту персональных данных).

1.1.3. «Обработка персональных данных» - любое действие (операция) или совокупность действий (операций), совершаемых с использованием средств автоматизации или без использования таких средств с персональными данными, включая сбор, запись, систематизацию, накопление, хранение, уточнение (обновление, изменение), извлечение, использование, передачу (распространение, предоставление, доступ), обезличивание, блокирование, удаление, уничтожение персональных данных.

1.1.4. «Конфиденциальность персональных данных» - обязательное для соблюдения Оператором или иным получившим доступ к персональным данным лицом требование не допускать их распространения без согласия субъекта персональных данных или наличия иного законного основания.

1.1.5. «Сайт Сайтогон» - это совокупность связанных между собой веб-страниц, размещенных в сети Интернет по уникальному адресу (URL): sitogon.ru, а также его субдоменах.

1.1.6. «Субдомены» - это страницы или совокупность страниц, расположенные на доменах третьего уровня, принадлежащие сайту Сайтогон, а также другие временные страницы, внизу который указана контактная информация Администрации

1.1.5. «Пользователь сайта Сайтогон » (далее Пользователь) – лицо, имеющее доступ к сайту Сайтогон, посредством сети Интернет и использующее информацию, материалы и продукты сайта Сайтогон.

1.1.7. «Cookies» — небольшой фрагмент данных, отправленный веб-сервером и хранимый на компьютере пользователя, который веб-клиент или веб-браузер каждый раз пересылает веб-серверу в HTTP-запросе при попытке открыть страницу соответствующего сайта.

1.1.8. «IP-адрес» — уникальный сетевой адрес узла в компьютерной сети, через который Пользователь получает доступ на Сайт.

1.1.9. «Товар » - продукт, который Пользователь заказывает на сайте и оплачивает через платёжные системы.
 

2. Общие положения

2.1. Использование сайта Сайтогон Пользователем означает согласие с настоящей Политикой конфиденциальности и условиями обработки персональных данных Пользователя.

2.2. В случае несогласия с условиями Политики конфиденциальности Пользователь должен прекратить использование сайта Сайтогон .

2.3. Настоящая Политика конфиденциальности применяется к сайту Сайтогон. Сайт не контролирует и не несет ответственность за сайты третьих лиц, на которые Пользователь может перейти по ссылкам, доступным на сайте Сайтогон.

2.4. Администрация не проверяет достоверность персональных данных, предоставляемых Пользователем.
 

3. Предмет политики конфиденциальности

3.1. Настоящая Политика конфиденциальности устанавливает обязательства Администрации по неразглашению и обеспечению режима защиты конфиденциальности персональных данных, которые Пользователь предоставляет по запросу Администрации при регистрации на сайте Сайтогон, при подписке на информационную e-mail рассылку или при оформлении заказа.

3.2. Персональные данные, разрешённые к обработке в рамках настоящей Политики конфиденциальности, предоставляются Пользователем путём заполнения форм на сайте Сайтогон и включают в себя следующую информацию:
3.2.1. фамилию, имя, отчество Пользователя;
3.2.2. контактный телефон Пользователя;
3.2.3. адрес электронной почты (e-mail)
3.2.4. место жительство Пользователя (при необходимости)
3.2.5. адрес доставки Товара (при необходимости) 3.2.6. фотографию (при необходимости).

3.3. Сайт защищает Данные, которые автоматически передаются при посещении страниц:
- IP адрес;
- информация из cookies;
- информация о браузере 
- время доступа;
- реферер (адрес предыдущей страницы).

3.3.1. Отключение cookies может повлечь невозможность доступа к частям сайта , требующим авторизации.

3.3.2. Сайт осуществляет сбор статистики об IP-адресах своих посетителей. Данная информация используется с целью предотвращения, выявления и решения технических проблем.

3.4. Любая иная персональная информация неоговоренная выше (история посещения, используемые браузеры, операционные системы и т.д.) подлежит надежному хранению и нераспространению, за исключением случаев, предусмотренных в п.п. 5.2. и 5.3. настоящей Политики конфиденциальности.
 

4. Цели сбора персональной информации пользователя

4.1. Персональные данные Пользователя Администрация может использовать в целях:
4.1.1. Идентификации Пользователя, зарегистрированного на сайте Сайтогон для его дальнейшей авторизации, оформления заказа и других действий.
4.1.2. Предоставления Пользователю доступа к персонализированным данным сайта Сайтогон.
4.1.3. Установления с Пользователем обратной связи, включая направление уведомлений, запросов, касающихся использования сайта Сайтогон, оказания услуг и обработки запросов и заявок от Пользователя.
4.1.4. Определения места нахождения Пользователя для обеспечения безопасности, предотвращения мошенничества.
4.1.5. Подтверждения достоверности и полноты персональных данных, предоставленных Пользователем.
4.1.6. Создания учетной записи для использования частей сайта Сайтогон, если Пользователь дал согласие на создание учетной записи.
4.1.7. Уведомления Пользователя по электронной почте.
4.1.8. Предоставления Пользователю эффективной технической поддержки при возникновении проблем, связанных с использованием сайта Сайтогон.
4.1.9. Предоставления Пользователю с его согласия специальных предложений, информации о ценах, новостной рассылки и иных сведений от имени сайта Сайтогон.
4.1.10. Осуществления рекламной деятельности с согласия Пользователя.
 

5. Способы и сроки обработки персональной информации

5.1. Обработка персональных данных Пользователя осуществляется без ограничения срока, любым законным способом, в том числе в информационных системах персональных данных с использованием средств автоматизации или без использования таких средств.

5.2. Пользователь соглашается с тем, что Администрация вправе передавать персональные данные третьим лицам, в частности, курьерским службам, организациями почтовой связи (в том числе электронной), операторам электросвязи, исключительно в целях выполнения заказа Пользователя, оформленного на сайте Сайтогон, включая доставку Товара, документации или e-mail сообщений.

5.3. Персональные данные Пользователя могут быть переданы уполномоченным органам государственной власти Российской Федерации только по основаниям и в порядке, установленным законодательством Российской Федерации.

5.4. При утрате или разглашении персональных данных Администрация вправе не информировать Пользователя об утрате или разглашении персональных данных.

5.5. Администрация принимает необходимые организационные и технические меры для защиты персональной информации Пользователя от неправомерного или случайного доступа, уничтожения, изменения, блокирования, копирования, распространения, а также от иных неправомерных действий третьих лиц.

5.6. Администрация совместно с Пользователем принимает все необходимые меры по предотвращению убытков или иных отрицательных последствий, вызванных утратой или разглашением персональных данных Пользователя.
 

6. Права и обязанности сторон

6.1. Пользователь вправе:

6.1.1. Принимать свободное решение о предоставлении своих персональных данных, необходимых для использования сайта Сайтогон, и давать согласие на их обработку.

6.1.2. Обновить, дополнить предоставленную информацию о персональных данных в случае изменения данной информации.

6.1.3. Пользователь имеет право на получение у Администрации информации, касающейся обработки его персональных данных, если такое право не ограничено в соответствии с федеральными законами. Пользователь вправе требовать от Администрации уточнения его персональных данных, их блокирования или уничтожения в случае, если персональные данные являются неполными, устаревшими, неточными, незаконно полученными или не являются необходимыми для заявленной цели обработки, а также принимать предусмотренные законом меры по защите своих прав.

6.2. Администрация обязана:

6.2.1. Использовать полученную информацию исключительно для целей, указанных в п. 4 настоящей Политики конфиденциальности.

6.2.2. Обеспечить хранение конфиденциальной информации в тайне, не разглашать без предварительного письменного разрешения Пользователя, а также не осуществлять продажу, обмен, опубликование, либо разглашение иными возможными способами переданных персональных данных Пользователя, за исключением п.п. 5.2 и 5.3. настоящей Политики Конфиденциальности.

6.2.3. Принимать меры предосторожности для защиты конфиденциальности персональных данных Пользователя согласно порядку, обычно используемого для защиты такого рода информации в существующем деловом обороте.

6.2.4. Осуществить блокирование персональных данных, относящихся к соответствующему Пользователю, с момента обращения или запроса Пользователя, или его законного представителя либо уполномоченного органа по защите прав субъектов персональных данных на период проверки, в случае выявления недостоверных персональных данных или неправомерных действий.
 

7. Ответственность сторон

7.1. Администрация, не исполнившая свои обязательства, несёт ответственность за убытки, понесённые Пользователем в связи с неправомерным использованием персональных данных, в соответствии с законодательством Российской Федерации, за исключением случаев, предусмотренных п.п. 5.2., 5.3. и 7.2. настоящей Политики Конфиденциальности.

7.2. В случае утраты или разглашения Конфиденциальной информации Администрация не несёт ответственность, если данная конфиденциальная информация:
7.2.1. Стала публичным достоянием до её утраты или разглашения.
7.2.2. Была получена от третьей стороны до момента её получения Администрацией Ресурса.
7.2.3. Была разглашена с согласия Пользователя.

7.3. Пользователь несет полную ответственность за соблюдение требований законодательства РФ, в том числе законов о рекламе, о защите авторских и смежных прав, об охране товарных знаков и знаков обслуживания, но не ограничиваясь перечисленным, включая полную ответственность за содержание и форму материалов.

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

7.5. Пользователь соглашается, что информация, предоставленная ему как часть сайта Сайтогон, может являться объектом интеллектуальной собственности, права на который защищены и принадлежат другим Пользователям, партнерам или рекламодателям, которые размещают такую информацию на сайте Сайтогон. 
Пользователь не вправе вносить изменения, передавать в аренду, передавать на условиях займа, продавать, распространять или создавать производные работы на основе такого Содержания (полностью или в части), за исключением случаев, когда такие действия были письменно прямо разрешены собственниками такого Содержания в соответствии с условиями отдельного соглашения.

7.6. В отношение текстовых материалов (статей, публикаций, находящихся в свободном публичном доступе на сайте Сайтогон) допускается их распространение при условии, что будет дана ссылка на Сайт.

7.7. Администрация не несет ответственности перед Пользователем за любой убыток или ущерб, понесенный Пользователем в результате удаления, сбоя или невозможности сохранения какого-либо Содержания и иных коммуникационных данных, содержащихся на сайте Сайтогон или передаваемых через него.

7.8. Администрация не несет ответственности за любые прямые или косвенные убытки, произошедшие из-за: использования либо невозможности использования сайта, либо отдельных сервисов; несанкционированного доступа к коммуникациям Пользователя; заявления или поведение любого третьего лица на сайте.

7.9. Администрация не несет ответственность за какую-либо информацию, размещенную пользователем на сайте Сайтогон, включая, но не ограничиваясь: информацию, защищенную авторским правом, без прямого согласия владельца авторского права.
 

8. Разрешение споров

8.1. До обращения в суд с иском по спорам, возникающим из отношений между Пользователем и Администрацией, обязательным является предъявление претензии (письменного предложения или предложения в электронном виде о добровольном урегулировании спора).

8.2. Получатель претензии в течение 30 календарных дней со дня получения претензии, письменно или в электронном виде уведомляет заявителя претензии о результатах рассмотрения претензии.

8.3. При не достижении соглашения спор будет передан на рассмотрение Арбитражного суда г. Окуловка.

8.4. К настоящей Политике конфиденциальности и отношениям между Пользователем и Администрацией применяется действующее законодательство Российской Федерации.
 

9. Дополнительные условия

9.1. Администрация вправе вносить изменения в настоящую Политику конфиденциальности без согласия Пользователя.

9.2. Новая Политика конфиденциальности вступает в силу с момента ее размещения на сайте Сайтогон, если иное не предусмотрено новой редакцией Политики конфиденциальности.

9.3. Все предложения или вопросы касательно настоящей Политики конфиденциальности следует сообщать по адресу: mail@sitogon.ru

9.4. Действующая Политика конфиденциальности размещена на странице по адресу https://sitogon.ru/politika

Обновлено: 20 Июля 2017 года

г. Окуловка, Индивидуальный предприниматель Егоров Владимир Кирович, ОГРНИП 312530228500047, ИНН 532106023766