Рождественские термосы в подарок к каждому Хостингу или VPS

Получить подарок

Как заменить все ссылки в файлах и базе данных сайта

post thumbnail

Эта статья будет бонусной в цикле о борьбе со смешанным контентом при переносе сайта с http на https. Описанные здесь методы обычно используются нашими специалистами техподдержки и предназначены для опытных пользователей хостинга в режиме командной строки (SSH).

1. Зачем может потребоваться замена ссылок?

В зависимости от используемой CMS или структуры скриптов, если сайт самописный, в коде могут быть указаны как относительные ссылки, так и абсолютные. Относительные ссылки выглядят так:

<img src="/wp-content/themes/default/app/img/header/logo.png" alt="Company logo">

Абсолютные так:

<img src="https://site.com/wp-content/themes/default/app/img/header/logo.png" alt="Company logo">

Относительные ссылки так называются потому, что они указывают на путь к ресурсу относительно чего-либо — домена, корневой папки сайта, любой другой папки на сервере. При этом базовая папка или URL указывается один раз в каком-то файле настроек.

Если у вас используются абсолютные ссылки, то вам может потребоваться их заменить на новые в таких ситуациях:

  • перенос сайта на новое доменное имя или создание dev-копии;
  • переход на протокол https;
  • перемещение файлов сайта на другой сервер, где иная структура каталогов, и путь к папке сайта изменился;

Конечно же, лучшим вариантом будет изначально вести разработку с использованием относительных ссылок. Но наш 20-летний опыт показывает, что не все в мире идеально. И что не каждый, разрабатывая сайт много лет назад, задумывался о таких вещах.

2. Убедитесь, что у вас есть рабочий бекап

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

3. Изменение ссылок в файлах и базе данных сайта

Все работы выполняются через командную строку с использованием SSH-подключения или терминала в cPanel или другой панели управления сервером. Если у вас тариф общего хостинга, нужно попросить техподдержку активировать SSH-доступ для вашего аккаунта. Если у вас услуга VPS или выделенного сервера, то у вас всегда есть полный root-доступ к серверу.

После подключения переходим в папку вашего сайта или папку, в которой нужно провести замену:

~$ cd /home/username/public_html/

Если замену также нужно провести в базе данных, то нужно создать дамп базы в формате .sql и поместить в этой же папке. Не забудьте удалить потом файл дампа из папки в целях безопасности.

~$ mysqldump -u db_user -p db_name > db_name.sql

db_user, db_name — имя пользователя сервера MySQL и имя базы. Эти данные хранятся в конфигурационном файле CMS, например, WordPress — это wp-config.php, OpenCart — config.php, Joomla — configuration.php.

Начинаем поиск и замену:

~$ grep -liR "old phrase" ./ | xargs replace "old phrase" "new phrase" -- {}

Разберем пошагово, что делает команда:

  • grep — поиск по выражению;
  • — отобразить найденные файлы списком;
  • i — игнорировать регистр найденных выражений, то есть будут найдены выражения, записанные как строчными, так и прописными буквами или их комбинацией (использовать по необходимости);
  • R — рекурсивный поиск во всех файлах и каталогах, начиная с указанного каталога;
  • «old phrase» — что мы ищем, например имя старого домена вашего сайта, протокол «http://», путь к папке на сервере, и что угодно еще;
  • ./ — каталог, в котором искать; данная запись означает текущий каталог, где вы сейчас находитесь;
  • |  — символ передачи результата вывода другой программе, то есть, весь вывод команды grep будет передан на вход другой программе, написанной далее;
  • xargs — команда обычно сопровождает предыдущий символ перенаправления вывода, передает ваш список файлов следующей программе;
  • replace — как понятно из названия, производит замену одного выражения на другое, выражения указаны в кавычках следом; команда заканчивается двумя дефисами, после которых идет имя файла или файлов для обработки; в нашем случае там написаны фигурные скобки что означает: поместить переданные аргументы от предыдущего потока сюда.

Это самый простой вариант замены, если бы не одна проблема: replace — это компонент пакета программ mysql-сервера, который объявлен устаревшим и скоро будет удален из актуальных версий MySQL.

Потому вот второй способ замены с использованием альтернативной программы sed.

grep -liR 'OLD' ./ | xargs sed -i 's!OLD!NEW!g'

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

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

~$ mysql -u db_user -p db_name < db_name.sql

Последним шагом, по соображениям безопасности, будет удаление дампа:

rm -f db_name.sql

4. Замечания

  1. Перед началом замены рекомендуется закрыть доступ к сайту из вне каким-либо образом, например включить режим обслуживания в вашей CMS.
  2. Затем нужно сбросить весь файловый кеш — это уменьшит число обрабатываемых файлов, а также поможет избежать нарушения целостности данных. После замены рекомендуем еще раз удалить кеш.
  3. Не рекомендуется делать подобные манипуляции на WordPress: из-за использования сериализированных массивов данных в БД целостность информации нарушается в любом случае. Потому для WordPress нужно использовать специализированные инструменты.
  4. В конце не забудьте проверить, что в результате все работает корректно и восстановите данные из бекапа в противном случае. Вы же сделали бекап перед началом работ?

Вот и все, теперь вы знаете, как найти и заменить любой текст во всех файлах, где он встречается. Если вы чувствуете неуверенность в таком ответственном деле — мы всегда рады вам помочь!

Telegram Hostpro

Наш телеграм

с важными анонсами, розыгрышами и мемами

Присоединиться

Возможно, вас заинтересует

Причины возникновения ошибки 502. Как ее исправить?

Причины возникновения ошибки 502. Как ее исправить?

Ошибки 5хх означают проблемы на стороне сервера. Если говорить конкретно об ошибке 502, то...

Ruslan Holovatiuk | Обновлено: 30.10.2024

Причины возникновения ошибки 403. Как исправить?

Причины возникновения ошибки 403. Как исправить?

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

Ruslan Holovatiuk | Обновлено: 23.10.2024

Причины возникновения ошибки 508. Как исправить?

Причины возникновения ошибки 508. Как исправить?

Ошибка 508: Resource Limit Is Reached обычно означает, что ваша учетная запись превысила назначенные...

Ruslan Holovatiuk | Обновлено: 15.10.2024

Как вставить картинку в HTML и оптимизировать ее для лучшего ранжирования в Google 

Как вставить картинку в HTML и оптимизировать ее для лучшего ранжирования в Google 

Согласитесь, визуальные эффекты играют важную роль в создании привлекательного и функционального интерфейса. В этой...

Hostpro Company | Обновлено: 26.09.2024