Как заменить все ссылки в файлах и базе данных сайта
Эта статья будет бонусной в цикле о борьбе со смешанным контентом при переносе сайта с 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 — поиск по выражению;
- l — отобразить найденные файлы списком;
- 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. Замечания
- Перед началом замены рекомендуется закрыть доступ к сайту из вне каким-либо образом, например включить режим обслуживания в вашей CMS.
- Затем нужно сбросить весь файловый кеш — это уменьшит число обрабатываемых файлов, а также поможет избежать нарушения целостности данных. После замены рекомендуем еще раз удалить кеш.
- Не рекомендуется делать подобные манипуляции на WordPress: из-за использования сериализированных массивов данных в БД целостность информации нарушается в любом случае. Потому для WordPress нужно использовать специализированные инструменты.
- В конце не забудьте проверить, что в результате все работает корректно и восстановите данные из бекапа в противном случае. Вы же сделали бекап перед началом работ?
Вот и все, теперь вы знаете, как найти и заменить любой текст во всех файлах, где он встречается. Если вы чувствуете неуверенность в таком ответственном деле — мы всегда рады вам помочь!
Возможно, вас заинтересует
Причины возникновения ошибки 502. Как ее исправить?
Ошибки 5хх означают проблемы на стороне сервера. Если говорить конкретно об ошибке 502, то...
Обновлено: 30.10.2024
|Причины возникновения ошибки 403. Как исправить?
Для большинства пользователей интернета не слишком принципиально, почему они не могут попасть на сайт....
Обновлено: 23.10.2024
|Причины возникновения ошибки 508. Как исправить?
Ошибка 508: Resource Limit Is Reached обычно означает, что ваша учетная запись превысила назначенные...
Обновлено: 15.10.2024
|Как вставить картинку в HTML и оптимизировать ее для лучшего ранжирования в Google
Согласитесь, визуальные эффекты играют важную роль в создании привлекательного и функционального интерфейса. В этой...
Обновлено: 26.09.2024
|
Наш телеграм
с важными анонсами, розыгрышами и мемами
Присоединиться