Поиск по старому вебу  
Вернуться   Форум о старом интернете > Обсуждение сайтов > Создание сайтов
Регистрация Справка Пользователи Календарь Поиск Сообщения за день Все разделы прочитаны

Ответ
 
Опции темы Опции просмотра
Старый 09.05.2025   #1
danil
Администратор
 
Аватар для danil
 
Регистрация: 29.06.2024
Адрес: Живу в своем мирке, который строю для себя.
Сообщений: 1,120
По умолчанию Ошибка 400 в старых движках vBulletin и IPB при открытии последнего сообщения в теме

При попытке открыть из главной страницы форума ссылку на последнюю тему в разделе, web-сервер Nginx возвращает ошибку 400 Bad Request в старых браузерах. Такая ссылка имеет в себе параметр view=getnewpost для IPB и goto=newpost для vBulletin. Она возвращает браузеру другую ссылку, содержащую на конце #entry для IPB и #post для vBulletin.

Современные браузеры автоматом кодируют строку URL, которая кончается на #entry + id последнего сообщения и потом обратно раскодируют. Это позволяет открывать такую ссылку и прокручивают сообщение до нужного сообщения в теме.

В Internet Explorer 5 и Internet Explorer 6, браузер вставляет в запрос о редиректе ссылку с #entry на конце без кодирования. Возможно старые версии Nginx выполняли запрос по принципу "и так сойдет", но сейчас нет.

Как это работает:
1) Кликаем на ссылку содержащую параметр view=getnewpost для IPB и goto=newpost для vBulletin на главной странице форума.
2) В новых браузерах последнее сообщение в разделе нормально открывается, в старых браузерах получаем ошибку 400.

Что делать?
1) В шаблоне форума убираем из ссылки параметр view=getnewpost для IPB и goto=newpost для vBulletin.
Тогда тема будет открываться, но будет открыта просто первая страница темы.

или
2) Находим скрипт, который возвращает по этому запросу окончательную ссылку с #entry и удаляем часть с #entry.
Тогда будет открыта последняя страница темы, но без прокрутки окна браузера до последнего сообщения в теме.

Другого решения пока не нашел, но нахожусь в активном поиске.

Если у вас будут идеи как решить проблему, пишите.

Добавлено через 1 час 16 минут
Чтобы движок IPB не возвращал ссылку с #entry, открываем файл sources/action_public/topics.php

Ищем строку
PHP код:
$this->ipsclass->boink_it($this->ipsclass->base_url."showtopic=".$this->topic['tid']."&pid={$post['pid']}&{$pre}={$st}"."#entry".$post['pid']); 
Заменяем на
PHP код:
$this->ipsclass->boink_it($this->ipsclass->base_url."showtopic=".$this->topic['tid']."&pid={$post['pid']}&{$pre}={$st}"); 
Добавлено через 5 минут
Чтобы Vbulletin не возвращал ссылку с #post, открывает showthread.php

Ищем строку:
PHP код:
exec_header_redirect('showthread.php?' $vbulletin->session->vars['sessionurl_js'] . "p=$threadinfo[lastpostid]$highlightwords#post$threadinfo[lastpostid]"); 
Заменяем на:
PHP код:
exec_header_redirect('showthread.php?' $vbulletin->session->vars['sessionurl_js'] . "p=$threadinfo[lastpostid]$highlightwords"); 
__________________
Что делать, если вы со мной не согласны? Помнить, что написанное не истина в последней инстанции, а всего лишь мое мнение, которое я не навязываю вам.

Последний раз редактировалось danil, 09.05.2025 в 01:46. Причина: Добавлено сообщение
danil на форуме   Ответить с цитированием
Ответ


Опции темы
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT, время: 10:57.


Powered by vBulletin® Version 3.6.12
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd. Перевод: zCarot