Начало > Помощен център > Апликации > WordPress > Mixed Content в WordPress и промяна на URL в база данни

Mixed Content в WordPress и промяна на URL в база данни

Помощен център

Mixed Content в WordPress и промяна на URL в база данни

Все повече браузъри изискват имплементацията на https във всеки един аспект на един уебсайт, за да се избегне предупреждение при отварянето му, че не е сигурен. Заради това сайтове, които са създадени без SSL сертификат или зареждат ресурси като картинки от http източници, ще трябва да променят линковете в базата данни на своят WordPress.

Лесно можете да си представите хипотетична ситуация, при която вие имате WordPress сайт и инсталирате безплатен Let's Encrypt сертификат.

Влизате в администрацията на WordPress, в панела Settings > General коректно променяте протокола на домейна от http на https в полетата WordPress Address (URL) и Site Address (URL) и запазвате промените като кликате бутона Save Changes.

Зареждане на сайта в HTTPS протокол

Промяна на URL настройки в WordPress

Рефрешвате уебсайта и ... катинара в адресната лента на браузъра, символ на криптирана SSL връзка и HTTPS протокол, не се зарежда, а при кликане на иконата до https:// се зарежда съобщение за несигурна връзка и смесено съдържание.

Различните браузъри индикират визуално по различен начин наличието на смесено съдържание в адресната лента и показват различни съобщения, но с еднакъв контекст.

Opera

Предупреждение за смесено съдържание в Opera

Google Chrome

Предупреждение за смесено съдържание в Google Chrome

Mozilla Firefox

Предупреждение за смесено съдържание в Mozilla Firefox

Edge (IE)

Предупреждение за смесено съдържание в Edge (IE)

В статията ще ви покажем на какво се дължи зареждането на предупреждението и как може да решим този проблем.

Защо се зарежда предупреждението за смесено съдържание?

Грешката Mixed Content (смесено съдържание) и обикновено се появява, когато има проблем с HTTPS конфигурацията на уебсайта.

Например, уебсайта е конфигуриран за работа в HTTPS протокол чрез инсталирането на SSL сертификата и промяната в настройките на домейна, но изображенията и медийните връзки се зареждат през HTTP протокол. Браузърите забелязват тази разлика и коректно предупреждават посетителите, че някои връзки на сайта могат да бъдат опасни.

Нека отворим базата данни на сайта през phpMyAdmin и да потърсим записи за израза http: (ако не добавим двете точки ще получим в отговора и съществуващите https записи) :

Резултат от търсене в phpMyAdmin за https

Резултат от търсене в phpMyAdmin за http

Виждаме, че резултатите за http са почти двойно повече от резултатите за https. Обяснението е просто: всички линкове, в които WordPress използва за URL адрес променлива с данните от Settings > General са с протокол https. При всички останали линкове, създадени преди инсталирането на SSL сертификата, URL адресът е записан в базата данни със стария протокол http.

Нека кликнем линка Browse в резултатите от търсенето за http: в таблицата dm_posts.

Променете dmposts с името на вашата таблица. Префиксът на вашите таблици със сигурност е различен от dm

Кликаме линка Edit в произволен ред от таблицата и скролваме надолу:

Запис за guid параметър в phpMyAdmin

Откриваме, че параметъра guid съдържа URL адрес на страницата с протокол http.

Какво е GUID?

GUID е съкращение за глобално уникален идентификатор. Обикновено идентификаторите съдържат стринг с букви и цифри, например B42964FF като предназначението на всеки идентификатор е да гарантира уникалност на данните, свързани с този индекс.

Как WordPress използва GUID?

WordPress използва GUID, когато генерира своите RSS (и Atom) емисии и те съдържат маркера <guid></guid>:

<guid isPermaLink = "false"> https://domain.com/?p=1234 </guid>

Вместо да генерира код за GUID, WordPress използва реалния URL адрес на публикацията като GUID. Може би сте забелязали, че когато запазвате публикация и въведете съществуващ slug (технологично име), WordPress добавя цифра като суфикс за да осигури уникалност на URL адреса в цялата база данни. Именно затова изборът на URL за GUID е едно много интелигентно решение.

Видяхме на какво се дължи едновременното съществуване на линкове с http и https протокол едновременно, което е причина за предупреждението в браузърите.

Сега ще разгледаме няколко начина, по които може да редактираме съществуващите в базата данни записи от http на https.

Инсталиране на плъгин 'Better Search Replace'

Може да ви прозвучи странно, но най-лесният и сигурен начин за извършване на промяната е чрез инсталиране на плъгина Better Search Replace по познатия начин през Plugins > Add New:

Инсталиране на Better Search Replace в WordPress

Важно: Задължително преди всяка промяна в базата данни създаваме архив и преименуваме името по подразбиране на архива, за да не бъде възможно презаписването на .sql файла.

В главното меню кликаме линка Tools > Better Search Replace:

Достъп до Better Search Replace

В полето Search for въвеждаме търсената ключова дума (http:), а в полето Replace with въвеждаме думата/термина заместител (https:).

В полето Select tables избираме таблиците, в които открихме http: записи.

Маркираме полето Replace GUIDs за да ъпдейтнем протокола в колоната guid.

Ако маркираме полето Run as dry run? плъгина само ще сканира базата данни и ще ни покаже колко съвпадения са открити, но няма да извърши промяна - нещо като суха тренировка, затова оставяме полето празно.

Кликаме бутона Run Search/Replace за да стартираме процеса.

Конфигуриране на Better Search Replace

След няколко секунди получаваме информация за резултата:

Резултат от работата на Better Search Replace

Рефрешваме браузърите и вече катинара се зарежда коректно без съобщение за смесено съдържание:

Зареждане на сайта в HTTPS без грешка

Съобщение за сигурна HTTPS връзка

Изпълнение на заявка през phpMyAdmin и SSH

Може да използваме MySQL командата UPDATE за да променим всички налични записи http: в https: като въведем в SQL панела на phpMyAdmin следните заявки и кликнем бутона Go:

UPDATE dm_options SET `option_value` = REPLACE (`option_value`, 'http:', 'https:');

UPDATE dm_postmeta SET `meta_value` = REPLACE (`meta_value`, 'http:', 'https:');

UPDATE dm_posts SET `post_content` = REPLACE (`post_content`, 'http:', 'https:');

UPDATE dm_posts SET `guid` = REPLACE (`guid`, 'http:', 'https:');

Изпълнение на заявка през phpMyAdmin

Всички заявки са изпълнени успешно и phpMyAdmin ни информира колко промени са направени в съответните таблици:

Резултат от изпълнението на заявката в phpMyAdmin

Повтаряме отново търсенето за записи http: и този път phpMyAdmin не открива нито един запис:

Търсене за запис http в phpMyAdmin

Абсолютно същия резултат ще се получи като изпълним същите команди през SSH. Създадохме нова база данни в хостинг акаунт с активиран SSH достъп и импортирахме оригиналния архив на сайта, който генерираше грешката за смесено съдържание.

През SSH се логнахме в хостинга, след това се логнахме в базата данни и изпълнихме същите команди:

mysql -uUSER -p DATABASE
Enter password: 

Изпълнение на MySQL заявка през SSH

Ако вашият сайт не е изграден на WordPress сайт може да ползвате информацията в тази статия за да откриете през phpMyAdmin в кои таблици се съдържат http: записи и в посочените заявки да промените само имената на таблиците и параметъра, който съдържа http:.

Заключение

В огромният брой случаи грешката смесено съдържание се дължи на изработване на сайта в HTTP и след това регистриране на SSL сертификат за домейна и преминаване към HTTPS.

За да отстраним причината за появяване на тази грешка трябва още с конфигурирането на домейна да инсталираме SSL сертификат (в cPanel инсталиране на Let's Encrypt отнема една минута) и след това през Softaculous или ръчно да инсталираме WordPress в HTTPS протокол преди още да сме качили дори едно изображение.