0 Пользователей и 1 Гость просматривают эту тему.
  • 40 Ответов
  • 20342 Просмотров
*

webusver

  • Захожу иногда
  • 77
  • 9 / 0
Честно отработал тему http://joomlaforum.ru/index.php/topic,46291.0.html и был удивлен, что ничего не заработало... Точнее, не заработало так, как надо было... А надо было чтобы запись о 404-й ошибке появлялась в общем шаблоне сайта.

На самом деле полезная информация нашлась здесь (хотя и не вся): http://docs.joomla.org/Tutorial:Create_a_Custom_404_Error_Page

Теперь прилагаю пошаговое решение:

1. Создаем материал с текстом об ошибке.
2. Создаем меню с ссылкой на этот материал. Например 404.html. Запоминаем эту ссылку. Если используется SEF, то запоминаем SEF-ссылку. Модуль этого меню просто не публикуем, удалять не надо. Меню создается для красоты урла, чтобы не было всяких index.php?bla-bla-bla...
3. Из папки templates/system копируем файл error.php в папку templates/Название_Вашего_шаблона.
4. В файле templates/Название_Вашего_шаблона/templateDetails.xml вписываем перечисление файла error.php. в разделе <files><filename>error.php</filename></files>.
5. Заменяем содержимое нашего файла error.php на следующее:

Код
<?php
/**
 * @copyright Copyright (C) 2005 - 2010 Open Source Matters. All rights reserved.
 * @license GNU/GPL, see LICENSE.php
 * Joomla! is free software. This version may have been modified pursuant
 * to the GNU General Public License, and as distributed it includes or
 * is derivative of works licensed under the GNU General Public License or
 * other free or open source software licenses.
 * See COPYRIGHT.php for copyright notices and details.
 */

// no direct access
defined( '_JEXEC' ) or die( 'Restricted access' );

?>
<!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->code) == '404') {
header("HTTP/1.0 404 Not Found"); /*добавлено после учёта комментариев - отправляет код ошибки для поисковика*/
header('Location: 404.html'); /*открывает страницу ошибок для пользователя*/
exit;
}
?>
</body>
</html>

header('Location: 404.html'); - здесь вместо "404.html" пишете адрес своей страницы ошибок, тот который запомнили из меню. У меня стоит SEF-адрес.

Если без SEF, то у меня адрес был бы

header('Location: index.php?option=com_content&view=article&id=29 '); - если выбирать этот вариант, то меню не нужно создавать, однако, такой урл не очень красив.

29 это ID материала.

Вот теперь все работает.
« Последнее редактирование: 01.09.2010, 10:38:05 от webusver »
*

Greycat

  • Захожу иногда
  • 298
  • 63 / 0
А специальные расширения для этой цели использовать не пробовали?

com_error404

ReDJ
Я.д.=41001239962471  |  WMR=R271925495206  |  WMZ=Z144922023512
*

Goddanus

  • Новичок
  • 20
  • 1 / 0
Честно отработал тему http://joomlaforum.ru/index.php/topic,46291.0.html и был удивлен, что ничего не заработало...

На самом деле полезная информация нашлась здесь (хотя и не вся): http://docs.joomla.org/Tutorial:Create_a_Custom_404_Error_Page

Теперь прилагаю пошаговое решение:

1. Создаем материал с текстом об ошибке.
2. Создаем меню с ссылкой на этот материал. Запоминаем эту ссылку. Если используется SEF, то запоминаем SEF-ссылку. Модуль этого меню просто не публикуем, удалять не надо.


Вот зачем создавать меню? Достаточно создать материал и запомнить его ID, который указывается к любому материалу в списке "Менеджер материалов" - см. последнюю колонку.
В Вашем случае, index.php?option=com_content&view=article&id=29 - "29" это и есть этот самый ID материала.

В своем вариант Вы упустили вот это:
Код
<?php 
if ($this->error->code = '404') {
        header("HTTP/1.0 404 Not Found");
} ?>
Joomla "Ошибку 404" показывает посетителю, а поисковику отдаёт всё также статус "200" (Запрос файла выполнен успешно - т.е. файл есть, и удаляться из поиска не будет). Приведенный выше код решает проблему "статуса 200" - отдает "404 Not Found". Такие вот дела.

Отработайте ещё раз сообщение http://joomlaforum.ru/index.php/topic,46291.msg385435.html#msg385435, уверен, что никакого меню ради ID-материала создавать не надо.
*

webusver

  • Захожу иногда
  • 77
  • 9 / 0

Вот зачем создавать меню?
Меню создается для SEF, чтобы выдавался свой собственный заданный адрес страницы 404.
*

Aleks_El_Dia

  • Moderator
  • 3672
  • 353 / 0
  • AEDStudio Joomla! Direction
А специальные расширения для этой цели использовать не пробовали?

com_error404

ReDJ
Я пробовал - первый не пошел. Да и не считаю нужным на каждый чих ставить отдельный компонент.
Спам придумали боги в отместку за наши молитвы (с) Рома Воронежский
На молоко: Z369038872422 || R210017695494 || U247040729215 || ЯД 410011288250383
Мигрирую сайты, переношу расширения J!1.0->J!1.5->J!2.5. Более 50 успешных миграций.
*

SmokerMan

  • Гуру
  • 5293
  • 720 / 26
да по сути это все является шаблонизацией.
есть файл templates\system\error.php, его кидаем корень шаблона.
и в нем прописываем условие
Код: php
<?php if (($this->error->code) == '404') { ?>
// HTML код 404 ошибки
<?php } else { ?>
...
<?php } ?>
*

Goddanus

  • Новичок
  • 20
  • 1 / 0
Меню создается для SEF, чтобы выдавался свой собственный заданный адрес страницы 404.
Типа такого  http://site.ru/error404.html?

Ок. Вернемся к Вашему коду.
Вопрос. Каким макаром Вы сообщаете поисковику что страницы больше нет - ошибка 404? По вашему коду он получит ошибку 302 - затребованный URI перемешен, но лишь временно. Это значит что страница "А" (которой у Вас на сайте уже нет!) временно перемещена на страницу "Б". Для поисковика стр. "Б" ничем не отличается от др. страниц Вашего сайта, разве что только тем, что там выводится текст "Ошибка 404".
 
А вот здесь,
Код
<?php 
if ($this->error->code = '404') {
        header("HTTP/1.0 404 Not Found");
} ?>
поисковику отправляется код 404. И ниволнует.

А вот здесь,
Код
<?php
defined('JPATH_BASE') or die();
echo file_get_contents(JURI::root().'/index.php?option=com_content&view=article&id=29');
?>
посетителю сайта выводится "Страница не найдена" из материала (ID 29).
Таким образов и волки сыты - поисковик получил 404, и овцы целы - пользователь увидел страницу с сообщением об 404.
Разве что, есть один нюанс.
Допустим, пользователь идет на несуществующий адрес http://site.ru/bla-bla-bla.html . В приведенном мной варианте: а) Поисковик получит статус: 404 - материал не найден; б) Пользователю загрузится адрес http://site.ru/bla-bla-bla.html, в шаблоне сайта, с сообщением об ошибке 404.
Нюанс в том, что, пользователь попадет куда и шел, он не будет перекинут на стр. типа  http://site.ru/error404.html . Но если поиграться, то и это (http://site.ru/error404.html ) можно реализовать, если очень надо.

Я пробовал - первый не пошел. Да и не считаю нужным на каждый чих ставить отдельный компонент.
А как Вы боретесь с дублями страниц в поисковых выдачах? Прописываете редиректы 301 в .htaccess?
А как быть если их [дублей, или др.] более ста (100), например? Каждый раз править .htaccess?
« Последнее редактирование: 21.05.2010, 23:14:33 от Goddanus »
*

webusver

  • Захожу иногда
  • 77
  • 9 / 0
Вопрос. Каким макаром Вы сообщаете поисковику что страницы больше нет - ошибка 404?
 
А вот здесь,
Код
<?php 
if ($this->error->code = '404') {
        header("HTTP/1.0 404 Not Found");
} ?>
поисковику отправляется код 404. И ниволнует
Спасибо, впопыхах забыл про Not Found. Не спорю, хедеры надо отправлять.
*

baobab75

  • Новичок
  • 13
  • 1 / 0
Сделал, как писано.
Все работает, кроме страниц *.shtml
Для них выдается 404 страница браузера, видимо сервер хостера отбивает. Что делать, подскажите... ?
*

baobab75

  • Новичок
  • 13
  • 1 / 0
Протупил. Нужно было в настройках Rewrite добавить расширение в .htaccess


RewriteCond %{REQUEST_URI} (/|\.php|\.html|\.shtml|\.htm|\.feed|\.pdf|\.raw|/[^.]*)$  [NC]
*

igorksan

  • Давно я тут
  • 503
  • 23 / 1

Вот теперь все работает.
не работает! Сделал всё как описано. Результат - жму в Яндекс вебмастер на 404ю. www.sait.est/automobile/automobile после долгой попытки загрузить страницу урл получается www.sait.est/automobile/404.html и страница о неверном перенаправлении , только уже не джумловская а самого браузера .. А как я понимаю  урл должен быть www.sait.est/404.html
*

igorksan

  • Давно я тут
  • 503
  • 23 / 1
А специальные расширения для этой цели использовать не пробовали?

com_error404

ReDJ
Спасибо. ReDj как раз то, что я искал.
*

Aleks_El_Dia

  • Moderator
  • 3672
  • 353 / 0
  • AEDStudio Joomla! Direction
webusver, перепиши первый пост с учетом комментариев.
Спам придумали боги в отместку за наши молитвы (с) Рома Воронежский
На молоко: Z369038872422 || R210017695494 || U247040729215 || ЯД 410011288250383
Мигрирую сайты, переношу расширения J!1.0->J!1.5->J!2.5. Более 50 успешных миграций.
*

igorksan

  • Давно я тут
  • 503
  • 23 / 1
Точно. Не помешало бы. Ато я как ни крутил не вышло, а еслиб итог был подведён, гляди и получилось бы. А так пришлось компонент установить...
*

webusver

  • Захожу иногда
  • 77
  • 9 / 0
webusver, перепиши первый пост с учетом комментариев.
Первый пост переписан с учётом комментариев.

можно сделать так

1. Создаем материал не указывая ни категории, ни раздела... например "404 - Error" Вашим содержимым
2. Запоминаем ID созданного материала...
3. В файле error.php, который в папке templates/system стираем все содержимое и вставляем следующий код :

<?php       defined('JPATH_BASE') or die();       echo file_get_contents(JURI::root().'/index.php?option=com_content&view=article&id=777'); ?>

777 меняем на на Ваш ID материала  *DRINK*

Попробовал эту вставку. В результате открывается чистая пустая страница с неправильным адресом, при этом содержания материала с соответствующим id не появляется. В общем, у кого это работает - на здоровье, у кого же нет то см. исправленный первый пост. Наверно как-то так.
Всем успехов!
« Последнее редактирование: 01.09.2010, 10:45:56 от webusver »
*

altmer

  • Новичок
  • 2
  • 0 / 0
Цитировать
404 Скопировал, вставил - работает!
webusver Большое спасибо :)
*

Kesha

  • Захожу иногда
  • 60
  • 1 / 0
  • Миру мир, детям мороженое, женьшинам цветы!
До этого не думал что бывают такие страницы. Проверил у себя, оказалось их куча.
Воспользовался данным методом, стало намного лучше. Спасибо!
*

sir.milord

  • Осваиваюсь на форуме
  • 31
  • 3 / 0
Большое спасибо за статью! Всё получилось очень красиво.

У меня проблемка - всё сделано по инструкции и несколько раз проверено. При обращении к несуществующей странице загружается моя страница ошибки, но сервер всё равно возвращает статус HTTP/1.1 200 OK  :(

1. создал страницу ошибки
2. добавил файл error.php в шаблон и прописал его в templateDetails.xml
3. изменил содержание error.php по инструкции в первом посте

Я точно указал в файле error.php
Код
<?php 
if ($this->error->code = '404') {
        header("HTTP/1.0 404 Not Found");
} ?>

Страничка, конечно красивая. Но статус неправильный: вместо HTTP/1.0 404 Not Found возвращает HTTP/1.1 200 OK

Кто знает в чём может быть проблема (или каким образом можно найти в чём ошибка)?
« Последнее редактирование: 27.01.2011, 14:29:56 от sir.milord »
*

sir.milord

  • Осваиваюсь на форуме
  • 31
  • 3 / 0
В дополнение к написанному ранее.

Вернул джумловский стандартный файл error.php - все ошибки отлично обрабатываются и возвращается корректный статус.

Потом снова сделал всё как указано в данном руководстве, а в результате:

1) При запросе вида http://site.ru/beleberda9872.html Моя собственная страница ошибки конечно загружается, но код ошибки 404 не отправляется
2) При запросе вида http://site.ru/beleberda792/beleberda9872.html - вообще ничего не происходит - браузер Firefox говорит: "Неверное перенаправление на странице" Firefox определил, что сервер перенаправляет запрос на этот адрес таким образом, что он никогда не завершится.

т.е. как и раньше появилась проблема обработки статуса 404  :(
*

Fenomenum

  • Новичок
  • 4
  • 0 / 0
выполнил все по шагам как в 1 посте, однако, удалось только без SEF. Объясните поточнее какой адрес вставлять. Я создал материал, сделал пункт меню с алиасом 404, и вставляю в код. Мне Firefox выдает ошибку Неверное перенаправление на странице
Firefox определил, что сервер перенаправляет запрос на этот адрес таким образом, что он никогда не завершится.
Код
header("HTTP/1.0 404 Not Found"); 
header('Location: 404.html');
*

css_ufa

  • Захожу иногда
  • 179
  • 10 / 0
Все работает нормально!

Во всех браузерах корректно отображается!

Если у кого-то что не получится - то обращайтесь отпишу!

ТС молодец!)
Всё что не делается, всё к лучшему (с). Так говорили великии люди.
*

Abiladenda

  • Захожу иногда
  • 181
  • 5 / 0
Сайт на Zoo 2.5.14 Joomla 2.5.2 Я зделал так, в .htacces прописал ErrorDocument 404 /404.html сделал страницу в HTML с одноименным названием 404.html сделал минимальный дизайн прописал ссылку на главную сайта и закинул в корень сайта. Файлы error.php не трогал, потому как у меня шаблон от Yootheme и там еще и warp поэтому 404 генерится непонятно как короче заголовок отдает 404 так что все ОК. Однако увидел проблему в том что при включенном стандартном SEF если скажем ссылка имеет вид mysite.com/article.html и если после HTML любой код выдаст ошибку 404 все как и надо, но если скажем до HTML будет какая- то ошибка в линке перебросит на главную, гуглил но ничего не нашел как это поборть, пробовал уже все и ваши методы, и .htacces но не помогает. Начинаю думать что это баг Joomla потому как на сайте есть и не zoo ссылки а скажем на контакт и здесь тоже самое если ошибка после HTML тогда все ок и выдает 404, если же до перебрасывает на главную или в раздел категории. Может кто-то знает в чем трабл.?
*

lubitel3

  • Новичок
  • 23
  • 0 / 0
Сделал как в первом посте но всё равно выдаёт ошибку
Код
Fatal error: Cannot access protected property JException::$code in \error.php on line 22
Поработал с Google нашёл следующее решение, отредактировать родную страницу error.php потому как разные варианты всё равно приводят к ошибкам.
Код в файле error.php обернул в стили шаблона и поменял стили error.css, модулей и меню естественно нет.
В целом вполне прилично получилось вот 'http://trikotagservis.com/ги'.
*

SmokerMan

  • Гуру
  • 5293
  • 720 / 26
Сделал как в первом посте но всё равно выдаёт ошибку
Код
Fatal error: Cannot access protected property JException::$code in \error.php on line 22
в 1.5 нет класса JException, насколько мне известно))
*

lubitel3

  • Новичок
  • 23
  • 0 / 0
SmokerMan
Простите... забылся я это делал на Дж! 2.5
ссори *DRINK*
*

SmokerMan

  • Гуру
  • 5293
  • 720 / 26
SmokerMan
Простите... забылся я это делал на Дж! 2.5
ссори *DRINK*
то то  8)
для 2.5 тема осуждалась вроде в соответствующем разделе.
*

lubitel3

  • Новичок
  • 23
  • 0 / 0
Цитировать
то то 
для 2.5 тема осуждалась вроде в соответствующем разделе.
Ну... пристрели или поставь минус...
*

lubitel3

  • Новичок
  • 23
  • 0 / 0
Для 1.5 я делал вот так: создавал страницу без категории с именем/алиас 404 и в файле error.php всё удалял и ставил следующий код
Код
<?php
/**
 * @copyright Copyright (C) 2005 - 2010 Open Source Matters. All rights reserved.
 * @license GNU/GPL, see LICENSE.php
 * Joomla! is free software. This version may have been modified pursuant
 * to the GNU General Public License, and as distributed it includes or
 * is derivative of works licensed under the GNU General Public License or
 * other free or open source software licenses.
 * See COPYRIGHT.php for copyright notices and details.
 */

// no direct access
defined( '_JEXEC' ) or die( 'Restricted access' );
?>
 <?php
defined('JPATH_BASE') or die();
$app=& JFactory::getApplication();

// обработчик ошибок
if ($this->error->code == '404') {
$app -> redirect('/index.php?option=com_content&view=article&id=6');
}

?>
И ни каких пунктов меню не создавал, а id=6 это id страницы 404,  и всё работало на ура!
*

SmokerMan

  • Гуру
  • 5293
  • 720 / 26
Ну... пристрели или поставь минус...
зачем так жестко?)
Пожизненный бан без разговоров)
*

lubitel3

  • Новичок
  • 23
  • 0 / 0
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Криво работает сайт и админ часть

Автор Odyssey

Ответов: 11
Просмотров: 357
Последний ответ 10.02.2019, 06:13:39
от Odyssey
не работает главная без index.php

Автор Mary Poppins

Ответов: 11
Просмотров: 5876
Последний ответ 11.12.2018, 18:28:30
от all_zer
Не могу войти в админку Joomla 1.5

Автор MrSkif

Ответов: 14
Просмотров: 8244
Последний ответ 12.09.2018, 19:36:32
от PaLyCH
Не войду в админку Joomla 1.5.26, пишет соединение с сервером было сброшено

Автор rom_4

Ответов: 4
Просмотров: 3596
Последний ответ 16.05.2018, 17:28:18
от Алексей MeRsOvOd
не работает стандартный поиск Joomla 1.5.23

Автор Andrew1110

Ответов: 34
Просмотров: 10665
Последний ответ 11.02.2018, 10:31:42
от altvvc