Сверхбыстрый хостинг

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

При переезде на другой домен, смене главного зеркала или просто при переходе на 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 Нет
  • 19 Да
  • Мне понравилось!

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