2,138 просмотров

При переезде на другой домен, смене главного зеркала или просто при переходе на HTTPS, внутри сайта приходится многие ссылки менять вручную. Причем, ссылки могут присутствовать не только в шаблонах, но и в базе данных. А количество страниц могло накопиться уже несколько сотен или даже тысяч. Как решить эту задачу минимальными усилиями?

К примеру, у вас сайт на WordPress, использует БД MySQL и за несколько лет уже накопил тысячу статей. Править контекстные ссылки в каждой из статей будет долго, процесс можно автоматизировать, используя простой SQL-запрос и функцию REPLACE.

UPDATE `table_name` SET `filed_name` = REPLACE(`filed_name`, 
'http://old-site.ru', 'https://www.new-startup.com');

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

Вторым аргументом в функции REPLACE идет старый вариант адреса, третьим — новый адрес сайта. Не используйте здесь лишь части URL (например, протокол или доменную зону), так как вы можете затронуть и испортить другие ссылки в базе, которые вели не на ваш сайт. Лучше использовать ссылки в полном виде.

Такой простой шаблон SQL-запроса позволяет за секунду скорректировать записи в базе. Запускать его можно прямо в PHPMyAdmin (большинство хостингов предоставляют доступ к управлению БД), либо использовать любую другую программу, работающую с вашей базой, в том числе через консоль.

SQL-запрос для замены адресов в базе сайта на WordPress

В стандартной версии WordPress адреса хранятся лишь в двух местах. Это таблица wp_posts и колонки post_content и guid. При использовании плагина Advanced Custom Fields адреса могут также встречаться в таблице wp_postmeta в колонке meta_value. Для вордпресса я рекомендую использовать следующий шаблон SQL-запроса.

UPDATE `wp_posts` SET `guid` = REPLACE(`guid`, 
'http://old-site.ru', 'https://www.new-startup.com');
UPDATE `wp_posts` SET `post_content` = REPLACE(`post_content`, 
'http://old-site.ru', 'https://www.new-startup.com');
UPDATE `wp_postmeta` SET `meta_value` = REPLACE(`meta_value`, 
'http://old-site.ru', 'https://www.new-startup.com');

Консольные команды для замены ссылок в файлах

А что по поводу файлов с шаблонами? Для работы с ними я использую консоль (на Unix-подобных системах или под Mac). Для поиска и замены нужных текстовых участков в файлах можно использовать команду perl или sed (текстовый редактор), эти утилиты чаще всего уже установлены в системе.

Если шаблоны хранятся в одной папке, то используйте perl, запуская его из нужной директории.

perl -i -pe 's/http:\/\/site.ru/https:\/\/site.ru/g' ./*.tpl

Так как регулярные выражения используют слеши как разделители, то слеши в адресах ваших страниц нужно экранировать обратным слешем. Расширение .tpl дано для примера, у вас шаблоны могут храниться в php-файлах.

В случае, когда шаблоны лежат не в одной папке, а сразу в нескольких, то можно использовать рекурсивный поиск-замену следующей командой:

find . -type f -name "*.tpl" -exec sed -i '' -e 's/http:\/\/site.ru/https:\/\/site.ru/g' {} \;

Команда находит сначала все tpl-файлы, а потом заменяет в них строки, опираясь на заданное регулярное выражение.

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

  • 0 Нет
  • 17 Да
  • Мне понравилось!

Если вам понравилась статья, вы можете подписаться на RSS или E-mail рассылку. Для получения обновлений по электронной почте, введите ваш e-mail адрес в эту форму (Доставка от FeedBurner):