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

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

  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

Погодьтеся, візуальні ефекти відіграють важливу роль у створенні привабливого та функціонального інтерфейсу. Тож у...

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