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