Свой обработчик ошибочных url

У вас есть идея для расширения функциональности phpBB 3.0.x? Расскажите о ней здесь!
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
SvS
phpBB 1.4.3
Сообщения: 83
Зарегистрирован: 12.04.2009 14:50
Благодарил (а): 3 раза
Поблагодарили: 1 раз

Свой обработчик ошибочных url

Сообщение SvS » 02.01.2011 23:27

Не подскажет ли кто, что и где поправить, чтобы при запросе несуществующей темы/форума не показывалось сообщение "Запрошенной темы не существует", а вызывался свой php-скрипт-обработчик запрошенного url?

Добавлено спустя 8 минут 45 секунд:
P.S Или, как вариант - вызывать не скрипт, а просто 404 отдавать. Обработчик 404 в htaccess впишу...

Аватара пользователя
MIT
Former team member
Сообщения: 2500
Зарегистрирован: 14.03.2009 17:52
Откуда: 56°20′02″ с. ш. 36°42′45″ в. д.
Благодарил (а): 4 раза
Поблагодарили: 353 раза

Re: Свой обработчик ошибочных url

Сообщение MIT » 02.01.2011 23:47

Ищи код

Код: Выделить всё

trigger_error('NO_TOPIC'); 
и

Код: Выделить всё

trigger_error('NO_FORUM'); 
для тем и форумов в файлах viewtopic.php и viewforum.php соответсвенно.

SvS
phpBB 1.4.3
Сообщения: 83
Зарегистрирован: 12.04.2009 14:50
Благодарил (а): 3 раза
Поблагодарили: 1 раз

Re: Свой обработчик ошибочных url

Сообщение SvS » 03.01.2011 1:23

Т.е заменяем указанный код на

Код: Выделить всё

Header("Location: error.php?topic=" . $topic_id);
или

Код: Выделить всё

Header("Location: error.php?forum=" . $forum_id);
и в файле error.php читаем эти параметры

Код: Выделить всё

 <? 
$topic = $_GET['topic'];
$forum = $_GET['forum'];
И далее идёт процедура обработки или просто

Код: Выделить всё

<? 
header("HTTP/1.0 404 Not Found");
echo "Page not found";
?>
Насколько это "прямо" или есть варианты лучше?

Аватара пользователя
MIT
Former team member
Сообщения: 2500
Зарегистрирован: 14.03.2009 17:52
Откуда: 56°20′02″ с. ш. 36°42′45″ в. д.
Благодарил (а): 4 раза
Поблагодарили: 353 раза

Re: Свой обработчик ошибочных url

Сообщение MIT » 03.01.2011 1:43

Только после вызова Header ОБЯЗАТЕЛЬНО необходимо вызывать die() или exit.

SvS
phpBB 1.4.3
Сообщения: 83
Зарегистрирован: 12.04.2009 14:50
Благодарил (а): 3 раза
Поблагодарили: 1 раз

Re: Свой обработчик ошибочных url

Сообщение SvS » 03.01.2011 3:40

Всё работает, но в логах сервера вижу 2 редиректа подряд, один за другим - некрасиво и "несеошно" :(
Хотелось бы свети к одному, для чего ф-цию обработки думаю вставить в файлы форума...
В какой файл будет идеологически правильнее вставить эту ф-цию (в неё должен передаваться topic_id)? Как лучше с точки зрения производительности? В ф-ции присутствует довольно большой массив (несколько килобайт) с данными для редиректов.

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

Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 14533
Зарегистрирован: 12.05.2006 18:16
Откуда: Красноярск
Благодарил (а): 348 раз
Поблагодарили: 1556 раз

Re: Свой обработчик ошибочных url

Сообщение rxu » 03.01.2011 8:52

SvS писал(а):на несуществующие - отдавать 404, чтобы поисковики наконец-то убрали их из баз и не долбили запросами
В текущей версии phpBB это и так делается.
Изображение

rolets
phpBB 1.2.0
Сообщения: 16
Зарегистрирован: 07.01.2011 10:26
Поблагодарили: 1 раз

Re: Свой обработчик ошибочных url

Сообщение rolets » 07.01.2011 10:34

Ценная информация! спасибо
я на своем форуме вместо
Header("Location: error.php?topic=" . $topic_id);
написал
Header("Location: 404.php);

а в .htaccess прописал: ErrorDocument 404 /404.php

в самом файле 404.php
сверху указал

Код: Выделить всё

<?php 
header("HTTP/1.0 404 Not Found"); 
?>
а дальше полноценный файл.

Получилось красиво.
посмотрите форум о волнистых попугаях
Последний раз редактировалось FEAR93 03.07.2011 17:27, всего редактировалось 1 раз.
Причина: Не игнорируйте BBCode

biomexanik
phpBB 1.0.0
Сообщения: 6
Зарегистрирован: 30.06.2011 20:01

Re: Свой обработчик ошибочных url

Сообщение biomexanik » 01.07.2011 22:56

А я просто заменил в
viewtopic.php

Код: Выделить всё

{
	trigger_error('NO_TOPIC');
}
на

Код: Выделить всё

{
	trigger_error('NO_TOPIC');
	header("HTTP/1.0 404 Not Found"); 
}
в viewforum.php

Код: Выделить всё

{
	trigger_error('NO_FORUM');
}
на

Код: Выделить всё

{
	trigger_error('NO_FORUM');
        header("HTTP/1.0 404 Not Found"); 
}
Сделал у себя на сайте http://pcfixinfo.ru/
посмотреть можно с помощью например этого сервиса http://mainspy.ru/otvet_servera
http://pcfixinfo.ru - Форум о ремонте и обслуживании персональных компьютеров.

biomexanik
phpBB 1.0.0
Сообщения: 6
Зарегистрирован: 30.06.2011 20:01

Re: Свой обработчик ошибочных url

Сообщение biomexanik » 03.07.2011 17:56

Добавление к вышесказанному.
сделал вывод кода 404 для закрытых (скрытых) форумов, и тем в них. Допустим есть ссылка в общедоступной теме на тему из закрытого форума. Поисковик по ней переходит, и индексирует страницу вида "Для просмотра этого форума вы должны быть авторизованы."
Получается засорение индекса поисковика.
Выход очень простой:
Заменить в viewtopic.php

Код: Выделить всё

// Start auth check
if (!$auth->acl_get('f_read', $forum_id))
{ 
	if ($user->data['user_id'] != ANONYMOUS)
	{
		trigger_error('SORRY_AUTH_READ');
	}
на

Код: Выделить всё

// Start auth check
if (!$auth->acl_get('f_read', $forum_id))
{
  header("HTTP/1.1 404 Not Found"); 
	if ($user->data['user_id'] != ANONYMOUS)
	{
		trigger_error('SORRY_AUTH_READ');
	}
Заменить в viewforum.php

Код: Выделить всё

// Check if the user has actually sent a forum ID with his/her request
// If not give them a nice error page.
if (!$forum_id)
{
	trigger_error('NO_FORUM');
}
на

Код: Выделить всё

// Check if the user has actually sent a forum ID with his/her request
// If not give them a nice error page.
if (!$forum_id)
{
	trigger_error('NO_FORUM');
        header("HTTP/1.1 404 Not Found"); 
}
http://pcfixinfo.ru - Форум о ремонте и обслуживании персональных компьютеров.

PAW
phpBB 1.4.3
Сообщения: 93
Зарегистрирован: 18.03.2010 23:25
Благодарил (а): 14 раз

Re: Свой обработчик ошибочных url

Сообщение PAW » 18.05.2016 9:28

Здравствуйте. Извините за то, что поднимаю старую тему, но, как говорится в "тему". Может кто сталкивался с подобной проблемой: при переходе на удалённое сообщение авторизованным пользователям выводится информация "запрошенной темы не существует", а гостям пустое поле и в титле удалённого топика прописанный титл удалённой страницы, а не "запрошенного сообщения не существует". При переходе по некорректному адресу срабатывает мод error.php и выводится информация о битой ссылке, страница 404 для гостей и авторизованных пользователей.
Форум 3.0.14 с установленным сео модом.

Вернуться в «Запросы модов для phpBB 3.0.x»