Перейти к содержимому
aleyush

Старые ссылки на другие темы не работают

Рекомендуемые сообщения

Есть серьёзное неудобство при просмотре старых тем на форуме. Знаю как исправить, но нужно содействие администрации форума. Описание ниже.

 

Проблема.

При просмотре старых тем не работают ссылки в соседние топики. Постоянно жмёшь на ссылки - а там "нет такой страницы".

 

Подробности.

Решил посмотреть в чём дело на примере сообщения Вопросы новичков

Сообщение содержит ссылку на matizclub.ru. Я на форуме недавно и не в курсе его истории. Судя по всему, раньше форум "жил" на другом домене, в результате ссылки перестали работать.

Методом пристального взгляда определил правильную ссылку: Герметизация капота

 

Как исправить.

Имея базу сообщений, можно "пройтись" по ней скриптом и перекодировать старые ссылки. Это сделает чтение старых, но от этого не менее полезных тем заметно удобнее.

Исправить вручную конкретное сообщение-пример недостаточно - таких ссылок по форуму весьма много.

Другой вариант исправления - поместить "на старом месте" страницы, которые перенаправляли бы пользователей на корректные новые.

Изменено пользователем aleyush

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
 
......

Решил посмотреть в чём дело на примере сообщения Вопросы новичков

........

 

Эту исправил. Спасибо.

Вопросы новичков

Методом...хм-м :lol: Просто, исправил и всё. :shock:

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Эту исправил. Спасибо.

Вопросы новичков

Методом...хм-м :lol: Просто, исправил и всё. :shock:

Я уже обратил внимание - сейчас редактор настроен таким образом, что он при сохранении старые ссылки меняет на новые.

 

Но только в той же теме таких ссылок не одна и не две, а есть ещё и другие темы...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
...Но только в той же теме таких ссылок не одна и не две, а есть ещё и другие темы...

Только рук всего две. :shock: А времени и того меньше.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Так я потому исходно и обращался к администрации, имеющей доступ к базе данных форума. Вычитывать архив за несколько лет и руками править - удовольствие ещё то, нужно просто скриптик прогнать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вы можете написать скиптик? Все скажут огромное спасибо за это.

ТЗ на SQL запрос (PHP скрипт):

- выбрать строки в которых содержатся слова matizclub.net/

- заменить matizclub.net/ -> matizclub.net/

- данные обрабатывать пакетно для PHP, для SQL ставить LIMIT (по 30 строк за раз)

 

Желающему сделать напишу названия таблиц и полей.

Презент от клуба обещаю.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Нужен именно php или можно подключиться напрямую к базе?

 

Какая СУБД используется?

 

На MSSQL запрос выглядел бы примерно так:

 

update messages_table set message_body_column = replace(message_body_column, 'matizclub.ru//forum/', 'matizclub.net/') where message_body_column like '%matizclub.ru//forum/%'

 

Если хочется кусками, то можно так:

 

update messages_table set message_body_column = replace(message_body_column, 'matizclub.ru//forum/', 'matizclub.net/') where message_id_column in

(select top 30 message_id_column from messages_table where message_body_column like '%matizclub.ru//forum/%')

 

P.S. Двойные слэши вставил, так как иначе редактор форума меняет matizclub.ru//forum/ на matizclub.net/ :drinks:

 

P.P.S. Кстати, такой замены недостаточно, нужен ещё минимум один паттерн (смотри Вопросы новичков)

Изменено пользователем aleyush

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

База естественно MySQL.

Вьютопик можно вести только на 404, тут вариантов никаких. Или ставитьт паттерн просто на matizclub.net.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Какая версия MySQL? Подзапросы он не с первых версий стал поддерживать просто.

 

Если уже поддерживает, то

 

update messages_table set message_body_column = replace(message_body_column, 'matizclub.ru//forum/', 'matizclub.net/') where message_id_column in

(select message_id_column from messages_table where message_body_column like '%matizclub.ru//forum/%' limit 30)

 

P.S. Можно даже проще, оказывается:

update messages_table set message_body_column = replace(message_body_column, 'matizclub.ru//forum/', 'matizclub.net/') where message_body_column like '%matizclub.ru//forum/%' limit 30

 

Последний вариант без подзапроса работает с версии MySQL 3.23 - не думаю, что у Вас стоит что-то более древнее.

Изменено пользователем aleyush

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

5.0.37

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
5.0.37

 

Тогда должен сработать любой из вариантов в предыдущем сообщении.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Так что, сможете прогнать запрос? В него нужно только подставить имя таблицы сообщений, имя поля с телом сообщения и заменить двойные слеши на одинарные.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Да, да всё сделаю на днях.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

да не надо заморачиваться с запросами, скоро выложу htaccess, положете в папочку и будет перекидывать на matizclub.net в нужную тему :oops:

 

итак,

1) отыскиваем в папке домена matizclub.ru (в корне!) файл .htaccess, если его нет - создаем.

2) находим в нем строчку:

RewriteEngine on

(если такой нет - пишем)

3) после нее - вставляем:

RewriteRule ^forum/?(.*)$ http://www.matizclub.net/$1 [L,R=permanent]

4) сохраняем файл, заливаем на сервер в текстовом формате

 

готово :)

от варианта с запросами отличается простотой и более правильным подходом с точки зрения SEO.

можно проверить на моем сайте, зайдите по ссылке и попадете на этот форум: http://www.404studio.ru/forum/index.php?s...mp;#entry154880

Изменено пользователем Roden

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Всё отлично работает. Всё сделал.

Изначально искал вариант именно с mod_rewrite, но не смог найти работающего решения. Поиски и вопросы на форумах веб-мастеров ни к чему также не привели.

С точки зрения SEO вариант самый походящий, т.к. ссылки на сайт могут быть не только на форуме, но и на внешних ресурсах. Так мы приведем люде в нужное место в любом случае.

 

2 Roden

Нужен еще одна замена, шаблон такой:

http://www.matizclub.net/viewtopic.php?t=XXXXX

http://www.matizclub.net/index.php?showtopic=XXXXX

где XXXXX номер топика.

 

2 Roden и aleyush

Как и обещал от лица администрации клуба готов бесплатно прислать по комплекту светоотражающих наклеек (большую, маленькую и машинку). Полные почтовые адреса и ФИО получателя пишите в личку.

Также выражаю благодарность от лица администрации и остальных пользователей форума которым теперь станет легче работать со старыми темами.

 

Во, нашел правило которое я пытался прописать раньше.

RewriteRule ^/~(.+) http://www.matizclub.net/~$1 [R,L]

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А про вторую замену (viewtopic) я как раз писал выше, в 7 сообщении темы. :shock:

 

Согласен, что вставить на сервере перенаправление на новые страницы более правильно, так как заодно перенаправит и старые закладки в браузерах посетителей. Но всё-таки одно другому не мешает, можно и в базе перекодировать. :shock:

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

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

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

×