форум vBSupport.ru > vBulletin > Вопрос — Ответ
  • »
VBsupport перешел с домена .ORG на родной .RU Ура! Пожалуйста, обновите свои закладки - VBsupport.ru
 
 
 
 
Unlock
Продвинутый
Default 404 ошибка в vBulletin для удаленных и несуществующих тем
0

Можно ли как-то сделать, что если темы не существует (не была создана, но главное когда была удалена), то выдавалась 404 ошибка, вместо 200.
Сейчас для удаленных тем вот что выдается: http://vbsupport.ru/forum/showthread.php?t=112720 (только пример, а не реально удаленный топик) Суть не в тексте, а в том, что такая страница отдает код 200.
Может какие-то хаки есть или еще как-то можно настроить такой вариант?
Если кто-то готов решить проблемы платно, скиньте ваше предложение.
Bot
Yandex Bot Yandex Bot is online now
 
Join Date: 05.05.2005
Реклама на форуме А что у нас тут интересного? =)
 
 
Ghost
Гуру
 
Ghost's Avatar
Default
0

Unlock, когда тема удаляется, то и вся информация о ней удаляется из базы, т.е. не остается ничего, при помощи чего бы можно было определить, что такая тема когда-то существовала. т.о. образом остается только выдавать 404 при обращении к любой несуществующей теме. если такой вариант устраивает -- попробую накидать модуль.
 
 
Unlock
Продвинутый
Default
0

Ghost, не знал такой особенности. А вот в этом:
Quote:
if (((!$thread['visible'] AND !can_moderate($thread['forumid'], 'canmoderateposts'))) OR ($thread['isdeleted'] AND !can_moderate($thread['forumid'])))
$thread['isdeleted'] это что означает? Или это при "мягком" удалении?
Но вообще то, 404 для любой не существующей темы, тоже хороший вариант.
 
 
Ghost
Гуру
 
Ghost's Avatar
Default
4

Quote:
Originally Posted by Unlock View Post
$thread['isdeleted'] это что означает? Или это при "мягком" удалении?
угу при "мягком". на то оно и мягкое, чтобы оставлять информацию о теме в базе для возможности последующего восстановления. при "жестком" (физическом) удалении -- сносится вся инфа из таблиц.

информация о теме (сообщении, разделе) автоматически выбирается в скрипте global.php в переменную $threadinfo ($postinfo, $foruminfo) при наличии параметра threadid (postid, forumid) в запросе -- см. код этого скрипта после коментария
PHP Code:
// Init post/thread/forum values 
делается это при помощи функции 'verify_id' (includes/functions.php), которая переадресует запрос функции 'fetch_threadinfo' (fetch_postinfo, fetch_foruminfo), в конце которой есть вызов одноименного хука. соответсвенно, можно повесить на этот хук свой модуль: админка -- Продукты и модули -- Добавить новый модуль -- заполняем форму
  • Продукт = vBulletin
  • Местоположение модуля = fetch_threadinfo
  • Заголовок = 404_thread
  • Порядок выполнения = 5
  • Модуль включен = да
  • Код PHP модуля =
    PHP Code:
    if (!isset($threadcache["$threadid"]['threadid']) OR $threadid != intval($threadcache["$threadid"]['threadid']))
    {
        
    header('HTTP/1.1 404 Not Found');
        echo 
    'Error 404: Thread not found!';
        exit();

и жмем кнопку "Сохранить". аналогично поступаем с сообщениями, только местоположение модуля для них будет fetch_postinfo, а код модуля
PHP Code:
if (!isset($postcache["$postid"]['postid']) OR $postid != intval($postcache["$postid"]['postid']))
{
    
header('HTTP/1.1 404 Not Found');
    echo 
'Error 404: Post not found!';
    exit();

Ghost добавил 04.08.2009 в 11:26
Для раздела будет сложнее, т.к. если он не существует, то до хука дело не дойдет -- функция fetch_foruminfo прекратит свое выполнение после кода
PHP Code:
    if (!$vbulletin->forumcache["$forumid"])
    {
        return 
false;
    } 
но можно найти ближайший после выборки информации о разделе хук (это будет хук 'style_fetch') и повесить на него модуль такого содержания
PHP Code:
if ($vbulletin->GPC['forumid'] AND !isset($foruminfo['forumid']))
{
    
header('HTTP/1.1 404 Not Found');
    echo 
'Error 404: Forum not found!';
    exit();


Last edited by Ghost : 08-04-2009 at 12:26 PM. Reason: Добавлено сообщение
 
 
Ghost
Гуру
 
Ghost's Avatar
Default
9

вот держи готовый продукт -- просто импортируй его (админка -- Продукты и модули -- Управление продуктами -- Добавить/импортировать продукт)
Attached Files
File Type: xml product-g404.xml (2.2 KB, 44 views)
 
 
Unlock
Продвинутый
Default
0

Ghost, спасибо огромное!
Есть пара вопросов.Если не затруднит, объясни как ручками это сделать. Т.е. в каких файлах (видимо global.php) и в каком месте надо вставить код для каждого случая? Просто хочется иметь возможность без проблем откатиться, если возникнут не понятные моменты в работе.Да и пока есть мысль только для топиков выдавать 404 ошибку, но не для постов и разделов. Хотя это и полезно, но все сразу стремно ставить.
Я вот не в курсе, если поставить готовый вариант. После его удаления все изменения будут отменены или нет?
 
 
netwind
Гуру
 
netwind's Avatar
Default
0

Unlock, продукт - это такой термин vbulletin. Файл нужно загрузить в админке и все. И так же в админке потом удаляется без проблем.
А теперь расскажи почему выдача ошибки 404 так важна?
 
 
Ghost
Гуру
 
Ghost's Avatar
Default
0

Quote:
Originally Posted by Unlock View Post
в каком месте надо вставить код для каждого случая
кажется, я достаточно подробно объяснил, каким образом создается модуль и где.
Quote:
Originally Posted by Unlock View Post
Я вот не в курсе, если поставить готовый вариант. После его удаления все изменения будут отменены или нет?
netwind, уже ответил на этот вопрос. как поставить продукт -- опять-таки указал в том же посте, где и сам продукт прикреплен.
Quote:
Originally Posted by Unlock View Post
Хотя это и полезно, но все сразу стремно ставить.
а "ручками это сделать" не стремно? имхо проще поставить готовый продукт, чем вносить правки самому.
Quote:
Originally Posted by Unlock View Post
пока есть мысль только для топиков выдавать 404 ошибку
админка -- Продукты и модули -- Управление модулями: ищи модули 404_post, 404_thread, 404_forum и отключай любой из них, который не нужен.
Quote:
Originally Posted by netwind View Post
расскажи почему выдача ошибки 404 так важна
не важна, но полезна для поисков, чтобы они удалили из своего индекса удаленные с форума темы.
 
 
Unlock
Продвинутый
Default
0

netwind, не путай меня
Ghost, как поставить продукт - я в курсе ;) Я хотел не через интерфейс воблы сделать, а просто файлы вручную исправить. Ручками не стремно, я так скажем хоть и ламер, но продвинутый.
Но раз можно отключить темы, пост или раздел, то проверю сейчас. Но как откатится если что можно? Просто удалением "продукта"?
И да, сразу для netwind. Нечего делать удаленным темам, а точнее кучи одинаковых страниц в поисковиках. На Серче подробнее написал.
 
 
Ghost
Гуру
 
Ghost's Avatar
Default
0

Quote:
Originally Posted by Unlock View Post
Я хотел не через интерфейс воблы сделать, а просто файлы вручную исправить.
не надо этого делать -- откатить в таком случае будет сложнее.
Quote:
Originally Posted by Unlock View Post
Но как откатится если что можно? Просто удалением "продукта"?
продукт можно удалить. или просто отключить, не удаляя. как и любой модуль продукта.
 


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off




All times are GMT +4. The time now is 05:09 PM.


Powered by vBulletin® Version 3.6.6
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Loading...