Уважаемые пользователи!
C 7 ноября 2020 года phpBB Group прекратила выпуск обновлений и завершила дальнейшее развитие phpBB версии 3.2.
С 1 августа 2024 года phpBB Group прекращает поддержку phpBB 3.2 на официальном сайте.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до 31 декабря 2024 года.
С учетом этого, настоятельно рекомендуется обновить конференции до версии 3.3.

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

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

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

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

Сообщение SvS »

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

Добавлено спустя 8 минут 45 секунд:
P.S Или, как вариант - вызывать не скрипт, а просто 404 отдавать. Обработчик 404 в htaccess впишу...
Аватара пользователя
MIT
Former team member
Сообщения: 2500
Стаж: 15 лет
Откуда: 56°20′02″ с. ш. 36°42′45″ в. д.
Благодарил (а): 4 раза
Поблагодарили: 352 раза
Контактная информация:

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

Сообщение MIT »

Ищи код

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

trigger_error('NO_TOPIC'); 
и

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

trigger_error('NO_FORUM'); 
для тем и форумов в файлах viewtopic.php и viewforum.php соответсвенно.
SvS
phpBB 1.4.3
Сообщения: 83
Стаж: 14 лет 11 месяцев
Благодарил (а): 3 раза
Поблагодарили: 1 раз

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

Сообщение SvS »

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

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

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
Стаж: 15 лет
Откуда: 56°20′02″ с. ш. 36°42′45″ в. д.
Благодарил (а): 4 раза
Поблагодарили: 352 раза
Контактная информация:

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

Сообщение MIT »

Только после вызова Header ОБЯЗАТЕЛЬНО необходимо вызывать die() или exit.
SvS
phpBB 1.4.3
Сообщения: 83
Стаж: 14 лет 11 месяцев
Благодарил (а): 3 раза
Поблагодарили: 1 раз

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

Сообщение SvS »

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

Причина - контент некоторых топиков форума (успешно сидящих в индексе поисковиков и обросших беклинками) решено оформить в виде страниц сайта на том же домене (и поставить 301 соответственно), а на несуществующие - отдавать 404, чтобы поисковики наконец-то убрали их из баз и не долбили запросами
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16313
Стаж: 17 лет 10 месяцев
Откуда: Красноярск
Благодарил (а): 533 раза
Поблагодарили: 2119 раз
Контактная информация:

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

Сообщение rxu »

SvS писал(а):на несуществующие - отдавать 404, чтобы поисковики наконец-то убрали их из баз и не долбили запросами
В текущей версии phpBB это и так делается.
Изображение
rolets
phpBB 1.2.0
Сообщения: 16
Стаж: 13 лет 2 месяца
Поблагодарили: 1 раз
Контактная информация:

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

Сообщение rolets »

Ценная информация! спасибо
я на своем форуме вместо
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
Стаж: 12 лет 8 месяцев
Контактная информация:

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

Сообщение biomexanik »

А я просто заменил в
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
Стаж: 12 лет 8 месяцев
Контактная информация:

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

Сообщение biomexanik »

Добавление к вышесказанному.
сделал вывод кода 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
Стаж: 14 лет
Благодарил (а): 14 раз

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

Сообщение PAW »

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

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