webusver
Осваиваюсь на форуме
 
Репутация: +8/-0
Offline
Сообщений: 110
|
 |
« : 14.05.2010, 12:42:11 » |
|
Честно отработал тему 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
|
 |
« Ответ #1 : 14.05.2010, 13:27:00 » |
|
А специальные расширения для этой цели использовать не пробовали? com_error404ReDJ
|
|
|
|
|
Записан
|
|
|
|
Goddanus
Осваиваюсь на форуме
 
Репутация: +1/-0
Offline
Пол: 
Сообщений: 26
|
 |
« Ответ #2 : 19.05.2010, 19:29:43 » |
|
Честно отработал тему 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
Осваиваюсь на форуме
 
Репутация: +8/-0
Offline
Сообщений: 110
|
 |
« Ответ #3 : 20.05.2010, 09:44:48 » |
|
Вот зачем создавать меню?
Меню создается для SEF, чтобы выдавался свой собственный заданный адрес страницы 404.
|
|
|
|
|
Записан
|
|
|
|
Aleks_El_Dia
Moderator
   
Репутация: +331/-7
Offline
Пол: 
Сообщений: 4402
AEDStudio Joomla! Direction
|
 |
« Ответ #4 : 20.05.2010, 11:19:45 » |
|
А специальные расширения для этой цели использовать не пробовали? com_error404ReDJЯ пробовал - первый не пошел. Да и не считаю нужным на каждый чих ставить отдельный компонент.
|
|
|
|
|
Записан
|
|
|
|
|
SmokerMan
|
 |
« Ответ #5 : 20.05.2010, 13:06:25 » |
|
да по сути это все является шаблонизацией. есть файл templates\system\error.php, его кидаем корень шаблона. и в нем прописываем условие <?php if (($this->error->code) == '404') { ?> // HTML код 404 ошибки <?php } else { ?> ... <?php } ?>
|
|
|
|
|
Записан
|
|
|
|
Goddanus
Осваиваюсь на форуме
 
Репутация: +1/-0
Offline
Пол: 
Сообщений: 26
|
 |
« Ответ #6 : 21.05.2010, 22:42:25 » |
|
Меню создается для 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
Осваиваюсь на форуме
 
Репутация: +8/-0
Offline
Сообщений: 110
|
 |
« Ответ #7 : 25.05.2010, 17:01:21 » |
|
Вопрос. Каким макаром Вы сообщаете поисковику что страницы больше нет - ошибка 404? А вот здесь, <?php if ($this->error->code = '404') { header("HTTP/1.0 404 Not Found"); } ?> поисковику отправляется код 404. И ниволнует Спасибо, впопыхах забыл про Not Found. Не спорю, хедеры надо отправлять.
|
|
|
|
|
Записан
|
|
|
|
baobab75
Захожу иногда

Репутация: +1/-0
Offline
Сообщений: 13
|
 |
« Ответ #8 : 18.06.2010, 11:33:42 » |
|
Сделал, как писано. Все работает, кроме страниц *.shtml Для них выдается 404 страница браузера, видимо сервер хостера отбивает. Что делать, подскажите... ?
|
|
|
|
|
Записан
|
|
|
|
baobab75
Захожу иногда

Репутация: +1/-0
Offline
Сообщений: 13
|
 |
« Ответ #9 : 18.06.2010, 12:14:31 » |
|
Протупил. Нужно было в настройках Rewrite добавить расширение в .htaccess
RewriteCond %{REQUEST_URI} (/|\.php|\.html|\.shtml|\.htm|\.feed|\.pdf|\.raw|/[^.]*)$ [NC]
|
|
|
|
|
Записан
|
|
|
|
|
igorksan
|
 |
« Ответ #10 : 23.06.2010, 00:14:38 » |
|
Вот теперь все работает.
не работает! Сделал всё как описано. Результат - жму в Яндекс вебмастер на 404ю. www.sait.est/automobile/automobile после долгой попытки загрузить страницу урл получается www.sait.est/automobile/404.html и страница о неверном перенаправлении , только уже не джумловская а самого браузера .. А как я понимаю урл должен быть www.sait.est/404.html
|
|
|
|
|
Записан
|
|
|
|
|
igorksan
|
 |
« Ответ #11 : 30.07.2010, 11:25:44 » |
|
А специальные расширения для этой цели использовать не пробовали? com_error404ReDJСпасибо. ReDj как раз то, что я искал.
|
|
|
|
|
Записан
|
|
|
|
Aleks_El_Dia
Moderator
   
Репутация: +331/-7
Offline
Пол: 
Сообщений: 4402
AEDStudio Joomla! Direction
|
 |
« Ответ #12 : 30.07.2010, 14:44:10 » |
|
webusver, перепиши первый пост с учетом комментариев.
|
|
|
|
|
Записан
|
|
|
|
|
igorksan
|
 |
« Ответ #13 : 30.07.2010, 15:18:34 » |
|
Точно. Не помешало бы. Ато я как ни крутил не вышло, а еслиб итог был подведён, гляди и получилось бы. А так пришлось компонент установить...
|
|
|
|
|
Записан
|
|
|
|
Мольфар
Захожу иногда

Репутация: +0/-0
Offline
Пол: 
Сообщений: 17
|
 |
« Ответ #14 : 21.08.2010, 01:17:11 » |
|
можно сделать так 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 материала 
|
|
|
|
|
Записан
|
|
|
|
webusver
Осваиваюсь на форуме
 
Репутация: +8/-0
Offline
Сообщений: 110
|
 |
« Ответ #15 : 01.09.2010, 10:41:38 » |
|
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 материала  Попробовал эту вставку. В результате открывается чистая пустая страница с неправильным адресом, при этом содержания материала с соответствующим id не появляется. В общем, у кого это работает - на здоровье, у кого же нет то см. исправленный первый пост. Наверно как-то так. Всем успехов!
|
|
|
|
« Последнее редактирование: 01.09.2010, 10:45:56 от webusver »
|
Записан
|
|
|
|
altmer
Новичок
Репутация: +0/-0
Offline
Сообщений: 2
|
 |
« Ответ #16 : 21.09.2010, 15:19:46 » |
|
404 Скопировал, вставил - работает! webusver Большое спасибо 
|
|
|
|
|
Записан
|
|
|
|
Kesha
Осваиваюсь на форуме
 
Репутация: +1/-0
Offline
Сообщений: 61
Миру мир, детям мороженое, женьшинам цветы!
|
 |
« Ответ #17 : 19.01.2011, 18:43:26 » |
|
До этого не думал что бывают такие страницы. Проверил у себя, оказалось их куча. Воспользовался данным методом, стало намного лучше. Спасибо!
|
|
|
|
|
Записан
|
|
|
|
sir.milord
Осваиваюсь на форуме
 
Репутация: +3/-0
Offline
Пол: 
Сообщений: 34
|
 |
« Ответ #18 : 26.01.2011, 13:46:18 » |
|
Большое спасибо за статью! Всё получилось очень красиво. У меня проблемка - всё сделано по инструкции и несколько раз проверено. При обращении к несуществующей странице загружается моя страница ошибки, но сервер всё равно возвращает статус 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, 15:29:56 от sir.milord »
|
Записан
|
|
|
|
sir.milord
Осваиваюсь на форуме
 
Репутация: +3/-0
Offline
Пол: 
Сообщений: 34
|
 |
« Ответ #19 : 31.01.2011, 19:22:36 » |
|
В дополнение к написанному ранее. Вернул джумловский стандартный файл error.php - все ошибки отлично обрабатываются и возвращается корректный статус. Потом снова сделал всё как указано в данном руководстве, а в результате: 1) При запросе вида http://site.ru/beleberda9872.html Моя собственная страница ошибки конечно загружается, но код ошибки 404 не отправляется 2) При запросе вида http://site.ru/beleberda792/beleberda9872.html - вообще ничего не происходит - браузер Firefox говорит: "Неверное перенаправление на странице" Firefox определил, что сервер перенаправляет запрос на этот адрес таким образом, что он никогда не завершится. т.е. как и раньше появилась проблема обработки статуса 404 
|
|
|
|
|
Записан
|
|
|
|
Fenomenum
Новичок
Репутация: +0/-0
Offline
Сообщений: 4
|
 |
« Ответ #20 : 02.03.2011, 11:02:51 » |
|
выполнил все по шагам как в 1 посте, однако, удалось только без SEF. Объясните поточнее какой адрес вставлять. Я создал материал, сделал пункт меню с алиасом 404, и вставляю в код. Мне Firefox выдает ошибку Неверное перенаправление на странице Firefox определил, что сервер перенаправляет запрос на этот адрес таким образом, что он никогда не завершится. header("HTTP/1.0 404 Not Found"); header('Location: 404.html');
|
|
|
|
|
Записан
|
|
|
|
css_ufa
Осваиваюсь на форуме
 
Репутация: +6/-0
Offline
Пол: 
Сообщений: 190
Я Вас всех на сквозь вижу...
|
 |
« Ответ #21 : 17.01.2012, 14:20:30 » |
|
Все работает нормально!
Во всех браузерах корректно отображается!
Если у кого-то что не получится - то обращайтесь отпишу!
ТС молодец!)
|
|
|
|
|
Записан
|
|
|
|
Abiladenda
Осваиваюсь на форуме
 
Репутация: +0/-0
Offline
Сообщений: 38
|
 |
« Ответ #22 : 12.03.2012, 23:02:49 » |
|
Сайт на 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
Осваиваюсь на форуме
 
Репутация: +0/-0
Offline
Сообщений: 27
|
 |
« Ответ #23 : 18.04.2012, 12:02:47 » |
|
Сделал как в первом посте но всё равно выдаёт ошибку 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
|
 |
« Ответ #24 : 18.04.2012, 14:41:35 » |
|
Сделал как в первом посте но всё равно выдаёт ошибку Fatal error: Cannot access protected property JException::$code in \error.php on line 22 в 1.5 нет класса JException, насколько мне известно))
|
|
|
|
|
Записан
|
|
|
|
lubitel3
Осваиваюсь на форуме
 
Репутация: +0/-0
Offline
Сообщений: 27
|
 |
« Ответ #25 : 18.04.2012, 14:45:01 » |
|
SmokerMan Простите... забылся я это делал на Дж! 2.5 ссори 
|
|
|
|
|
Записан
|
|
|
|
|
SmokerMan
|
 |
« Ответ #26 : 18.04.2012, 14:47:20 » |
|
SmokerMan Простите... забылся я это делал на Дж! 2.5 ссори  то то  для 2.5 тема осуждалась вроде в соответствующем разделе.
|
|
|
|
|
Записан
|
|
|
|
lubitel3
Осваиваюсь на форуме
 
Репутация: +0/-0
Offline
Сообщений: 27
|
 |
« Ответ #27 : 18.04.2012, 14:48:57 » |
|
то то для 2.5 тема осуждалась вроде в соответствующем разделе. Ну... пристрели или поставь минус...
|
|
|
|
|
Записан
|
|
|
|
lubitel3
Осваиваюсь на форуме
 
Репутация: +0/-0
Offline
Сообщений: 27
|
 |
« Ответ #28 : 18.04.2012, 14:52:55 » |
|
Для 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
|
 |
« Ответ #29 : 18.04.2012, 15:02:12 » |
|
Ну... пристрели или поставь минус...
зачем так жестко?) Пожизненный бан без разговоров)
|
|
|
|
|
Записан
|
|
|
|
|