11.10.2017 07:24:59 am
Изначально в адресах тем форума phpBB присутствует параметр форума (f=xxx), в котором находится темы. Выглядит это примерно так:
Зачем разработчики добавили id форума в URL темы мне не понятно, ну, да ладно. Товарищ Shredder написал расширение для удаления этого параметра - Оптимизированные страницы тем - SEO Topic & Canonical URL, скачать у автора: http://www.phpbb-work.ru/seo-topic-url-t83.html. На данный момент на этом форуме установлено именно это расширение.
После установки экста, адреса выглядят так:
Что гораздо красивее.
Когда я установил расширение, у меня осталось много локальных ссылок с параметром f=, редактировать ~1500 постов в ручную - не разумно. Я для удаления в ссылках параметра f= написал небольшой сценарий (инструмент), который после запуска пробежится по всем постам в поисках локальных ссылок, если найдет ссылку с параметром f=, то удалит его.
И так, создаем файл tool.php с содержимым:
Заливаем его в корень форума и переходим по адресу форум.ру/tool.php и сценарий выполнит замену ссылок, результат выведет на экран - получилось или нет.
Перед запуском сценария необходимо в коде заменить мой домен
Важно: перед запуском сценария, сделать резервную копию Базы Данных. Всю операцию выполнять не на "живом" форуме.
Еще: для перенаправления, возможно, сторонних ссылок и для ПС я в конец файла .htaccess добавил следующий код:
Остается только разобраться с параметром "f=" в письме, что приходит на электронную почту, уведомляя о новых ответах в какой то теме.
viewtopic.php?f=58&t=1269
Зачем разработчики добавили id форума в URL темы мне не понятно, ну, да ладно. Товарищ Shredder написал расширение для удаления этого параметра - Оптимизированные страницы тем - SEO Topic & Canonical URL, скачать у автора: http://www.phpbb-work.ru/seo-topic-url-t83.html. На данный момент на этом форуме установлено именно это расширение.
После установки экста, адреса выглядят так:
viewtopic.php?t=1269
Что гораздо красивее.
Когда я установил расширение, у меня осталось много локальных ссылок с параметром f=, редактировать ~1500 постов в ручную - не разумно. Я для удаления в ссылках параметра f= написал небольшой сценарий (инструмент), который после запуска пробежится по всем постам в поисках локальных ссылок, если найдет ссылку с параметром f=, то удалит его.
И так, создаем файл tool.php с содержимым:
<?php
ini_set('display_errors', 'On');
error_reporting(E_ALL);
include('config.php');
$db = new mysqli($dbhost, $dbuser, $dbpasswd, $dbname);
if ($db->connect_errno)
{
exit('Error MYSQLI: ' . $db->connect_error);
}
$db->set_charset('utf8');
$result = $db->query('SELECT post_id, post_text FROM ' . $table_prefix . 'posts');
while($variable = $result->fetch_assoc())
{
// Поиск ссылок вида: https://danfa.net/viewtopic.php?f=58&t=1269
if (preg_match('|https\:\/\/danfa\.net\/viewtopic\.php\?f\=([0-9]+)|', $variable['post_text']))
{
$post_text = preg_replace('|https\:\/\/danfa\.net\/viewtopic\.php\?f\=([0-9]+)\&\;t=([0-9]+)|', 'http://danfa.org/viewtopic.php?t=$2', $variable['post_text']);
$post_text = $db->real_escape_string($post_text);
$r = $db->query('UPDATE phpbb_posts SET post_text = "' . $post_text . '" WHERE post_id = "' . $variable['post_id'] . '"');
if (!$r)
{
echo 'Error: ' . $variable['post_id'] . ' ' . $db->error . '<br />';
}
else
{
echo 'Ok: ' . $variable['post_id'] . '<br />';
}
}
}
Заливаем его в корень форума и переходим по адресу форум.ру/tool.php и сценарий выполнит замену ссылок, результат выведет на экран - получилось или нет.
Перед запуском сценария необходимо в коде заменить мой домен
danfa.net
(трижды) на свой.Важно: перед запуском сценария, сделать резервную копию Базы Данных. Всю операцию выполнять не на "живом" форуме.
Еще: для перенаправления, возможно, сторонних ссылок и для ПС я в конец файла .htaccess добавил следующий код:
# Удаление параметра "f="
RewriteCond %{THE_REQUEST} " /viewtopic\.php\?f=(\d+)&t=(\d+)"
RewriteRule ^ /viewtopic\.php\?t=%2 [R=301,L]
Остается только разобраться с параметром "f=" в письме, что приходит на электронную почту, уведомляя о новых ответах в какой то теме.
- Жалоба