Як замінити всі посилання в файлах і базі даних сайту

Купити хостинг для сайту від Hostpro

Ця стаття буде бонусною в циклі про боротьбу зі змішаним контентом при перенесенні сайту з 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;
  • переміщення файлів сайту на інший сервер, де інша структура каталогів, і шлях до директорії сайту змінився;

Звичайно ж, найкращим варіантом буде спочатку вести розробку з використанням відносних посилань. Але наш 18-річний досвід показує, що не всі в світі ідеально?. І що не кожен, розробляючи сайт багато років тому, замислювався про такі речі?.

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 і ім’я бази.

Починаємо пошук і заміну:

~$ 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 тут не потрібна.

~$ sed -i 's|old_phrase|new_phrase|g' ./

Взагалі, sed – це дуже багатофункціональний пакет, і щоб описати всі його можливості і способи застосування, потрібно писати книгу. Тому ми тут навіть не станемо намагатися це зробити в рамках однієї статті.

Сам процес пошуку і заміни може бути як майже миттєвим, так і займати години. Це залежить від кількості файлів, які потрібно обробити. Після завершення не забудьте назад імпортувати дамп бази даних, щоб зміни застосувались:

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

4. Зауваги

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

Ось і все, тепер ви знаєте, як знайти і замінити будь-який текст у всіх файлах, де він зустрічається. Якщо ви відчуваєте невпевненість в такій відповідальній справі – ми завжди раді вам допомогти!

Можливо, вас зацікавить

post thumbnail

Як встановити Moodle на сервер: покрокова інструкція

Раніше ми знайомили вас із системою Moodle. Детальніше про те, що це за система...

Diana Baranovska | Оновлено: 11.01.2022

post thumbnail

Як налаштувати і активувати CDN Backup Agent на VPS під управлінням CentOS / Fedora

Після оплати послуги R1Soft і входу в акаунт, знадобиться подальша його настройка. Як підключити...

Diana Honcharenko | Оновлено: 15.09.2021

post thumbnail

Помилка 404: що це і як усунути

Ситуація, коли ви шукаєте певну сторінку, а на екрані з’являється повідомлення “404 Not Found”...

Diana Baranovska | Оновлено: 12.01.2022

post thumbnail

Що таке звіт MTR і чим він корисний

MTR – це інструмент, завдяки якому адміністратори мають можливість діагностувати і виправляти помилки мережі, а...

Diana Baranovska | Оновлено: 11.01.2022