Сегодня 24 | 05 | 2018

Как создать собственную страницу для ошибки 404 в Joomla 1.5, Joomla! 2.5 ?

Надоела стандартная страница ошибки 404 ? Многие начинают лезть в файл .htaccess и там прописывать строчки типа "ErrorDocument 404 /filename.html Это не плохо, но есть способ проще и лучше!

Всё что нам для этого потребуется- указать CMS Joomla! как она должна себя вести в этой ситуации.

  1. Создаём материал с содержимым, которое вы бы хотели видеть в качестве страници ошибки.
  2. Создадим файл с именем error.php который содержит вот эти строки (для Joomla! 1.5):

    <?php
    defined( '_JEXEC' ) or die( 'Restricted index access' );
    if (($this->error->code) == '404'){
      header("HTTP/1.0 404 Not Found");
      header('Location: ' . $this->baseurl . '/адрес странички');
      exit;
    }
    ?>

    Для Joomla! 2.5:

    <?php
    defined( '_JEXEC' ) or die( 'Restricted index access' );
    if (($this->error->getCode()) == '404') {
      header("HTTP/1.0 404 Not Found");
      header('Location: ' . $this->baseurl . '/адрес странички');
      exit;
    }
    ?>

    Здесь '/адрес странички' это URL странички вывода ошибки 404.

    Этот вариант в действительности выдаёт редирект 302, но он всё же имеет право на жизнь.
    Лучше, когда сервер будет отдавать код 404, как писалось в комментариях. Для этого заменим строку

    header('Location: ' . $this->baseurl . '/адрес странички');

    на другую

    echo file_get_contents(JURI::root().'адрес странички');

    В этом случае сервер будет отдавать код 404. За что поисковики скажут нам спасибо :)

    Приведу код целиком (Joomla! 1.5):

    <?php
    defined( '_JEXEC' ) or die( 'Restricted access' );
    if ($this->error->code = '404') {
       header("HTTP/1.0 404 Not Found");
       echo file_get_contents(JURI::root().'адрес странички');
       exit;
    }
    ?>

    Для Joomla! 2.5:

    <?php
    defined( '_JEXEC' ) or die( 'Restricted access' );
    if (($this->error->getCode()) == '404'){
       header("HTTP/1.0 404 Not Found");
       echo file_get_contents(JURI::root().'адрес странички');
       exit;
    }
    ?>

  3. Создаём пункт меню, в котором указываем наш материал, в пункте 'ссылка' видим URL вида ' index.php?option=com_content&view=article&id=21 ' копируем его и вставляем в файл error.php вместо 'адрес странички' (символы одинарных кавычек должны быть сохранены тоесть 'index.php?option=com_content&view=article&id=21'). Созданный нами пункт меню можно просто снять с публикации, или удалить.

  4. Помещаем созданный нами файл error.php в папку нашего шаблона /templates/наш шаблон/ и проверяем, введя любой неверный адрес в строке браузера. Если всё зделано правельно, вы увидите вашу страницу в дизайне вашего сайта, со всеми меню и т.д.
     

По сути мы просто переписали (переподключили) стандартный файл error.php, находящийся по адресу /templates/system/error.php

Если кому то нужно, что бы при несуществующем URL открывалась главная страница, просто вместо адрес странички поставте пробел

Но лучше всётаки показывать хотя-бы карту сайта или сообщить пользователю что такой страницы не существует и предложить варианты решения проблемы

Комментарии   

-1 #30 Сергей Бедринов 07.10.2016 00:05
Цитирую Сергей007:
Привет! Знаешь почему при запросе example.com/45268799411213 выдает ошибку 404, а при запросе example.com/abrakadabra 200 Ok?

Скорее всего колдует какое то расширение. Например djcatalog.
Цитировать
-1 #29 Сергей007 06.10.2016 22:50
Привет! Знаешь почему при запросе example.com/452 68799411213 выдает ошибку 404, а при запросе example.com/abr akadabra 200 Ok?
Цитировать
-1 #28 Anatoly 20.06.2016 15:38
аналогичная ситуация с белым экраном, у меня это было связано с невозможностью редактирования параметра allow_url_fopen =1 в php.ini, сделал через curl:
Цитировать
-3 #27 Сергей Бедринов 22.09.2014 00:00
Цитирую andrej:
Цитирую Light_And_Dark:
Цитирую Focus:
Цитирую Light_And_Dark:
Цитирую Focus:
Цитирую Light_And_Dark:
У меня не получилось. Вместо содержимого 404 страницы созданной мной чисто белый экран. Может я что-то не так сделала?

Какая версия Joomla? Добавил код для Joomla! 2.5

У меня 1.5.26

Надо проверить, будет ли открываться страница ошибки, если просто в браузере дописать её адрес к адресу сайта, если просто в одинарных скобках оставить слеш- главная тоже не открывается? Какой способ используете? с header Location? или file_get_contents?

Не работает вариант file_get_contents. Вариант с header Location работает корректно, но 302 заголовок меня не устраивает.


Помогите такая же проблемма. Как решили этот вопрос? С header Location работает, file_get_contents Warning: file_get_contents


Можно посмотреть на сообщение ошибки полностью?
Цитировать
-1 #26 andrej 21.09.2014 17:56
Цитирую Light_And_Dark:
Цитирую Focus:
Цитирую Light_And_Dark:
Цитирую Focus:
Цитирую Light_And_Dark:
У меня не получилось. Вместо содержимого 404 страницы созданной мной чисто белый экран. Может я что-то не так сделала?

Какая версия Joomla? Добавил код для Joomla! 2.5

У меня 1.5.26

Надо проверить, будет ли открываться страница ошибки, если просто в браузере дописать её адрес к адресу сайта, если просто в одинарных скобках оставить слеш- главная тоже не открывается? Какой способ используете? с header Location? или file_get_conten ts?

Не работает вариант file_get_conten ts. Вариант с header Location работает корректно, но 302 заголовок меня не устраивает.


Помогите такая же проблемма. Как решили этот вопрос? С header Location работает, file_get_conten ts Warning: file_get_conten ts
Цитировать
-1 #25 Сергей Бедринов 29.03.2014 22:58
Цитирую snooppiikk:
Цитирую Андрей:
Доброго времени суток. Не первый раз читаю подобный мануал, каждый раз делаю как написано, но каждый раз появляется сообщение "Warning: file_get_contents(http://big-internet.ru//index.php?option=com_content&view=article&id=91) [function.file-get-contents]: failed to open stream: HTTP request failed! in /home/k10717/public_html/big-internet.ru/templates/ot_sexyqueen/error.php on line 5". Может быть Вы сможете помочь мне с решением проблемы!? CMS Joomla! 2.5.11

Помогите, та же проблема.


echo file_get_conten ts(JURI::root() .'адрес странички');

'адрес странички' это адрес без http:// и домена.

например так: 'map.html'

Посмотрите на что ругается:
http://big-internet.ru//index.php?option=com_content&view=article&id=9

тут два слеша между доменом и index.php
попробуйте убрать слеш.
тоесть так: 'map.html'

если поможет- прошу сообщить.
Цитировать
-1 #24 snooppiikk 29.03.2014 20:37
Цитирую Андрей:
Доброго времени суток. Не первый раз читаю подобный мануал, каждый раз делаю как написано, но каждый раз появляется сообщение "Warning: file_get_contents(http://big-internet.ru//index.php?option=com_content&view=article&id=91) [function.file-get-contents]: failed to open stream: HTTP request failed! in /home/k10717/public_html/big-internet.ru/templates/ot_sexyqueen/error.php on line 5". Может быть Вы сможете помочь мне с решением проблемы!? CMS Joomla! 2.5.11

Помогите, та же проблема.
Цитировать
0 #23 Андрей 11.01.2014 10:22
Доброго времени суток. Не первый раз читаю подобный мануал, каждый раз делаю как написано, но каждый раз появляется сообщение "Warning: file_get_contents(http://big-internet.ru//index.php?option=com_content&view=article&id=91) [function.file- get-contents]: failed to open stream: HTTP request failed! in /home/k10717/pu blic_html/big-i nternet.ru/temp lates/ot_sexyqu een/error.php on line 5". Может быть Вы сможете помочь мне с решением проблемы!? CMS Joomla! 2.5.11
Цитировать
-1 #22 Доброжелатель 14.12.2013 15:20
Спасибо перенаправление сработало! Мой сайт заработал по новому! И страницы стали открываться как надо. :lol:
Цитировать
-1 #21 Кирилл 06.09.2013 11:45
Все работает! Спасибо!
Только не сразу.
Пункт меню лучше создать с названием '404' и в место /index.php?opti on=com_content& view=article&id =ид написать /404 и все будет работать
Цитировать