Модул 3 · 3.2
www, пренасочване и смесено съдържание
Модул 3: Адрес, https и потребители · Време за четене: 9 минути
Учебна цел: След този урок ще можете да изберете един основен адрес, да пренасочите всички варианти към него с едно пренасочване и да откривате и отстранявате смесено съдържание (mixed content).
Ключови понятия: каноничен адрес, 301 и 308, верига от пренасочвания, смесено съдържание (mixed content), търсене и замяна в базата данни, сериализирани данни
Четири адреса, един уебсайт
Вашият уебсайт е достъпен на четири адреса:
http://example.com
http://www.example.com
https://example.com
https://www.example.comЗа посетителя това няма значение, но за търсачките това са четири различни адреса с едно и също съдържание. Бисквитките (например бисквитката Ви за вход) също важат за конкретно име: който влезе през www, не е влязъл в домейна без www. Затова избирате един каноничен адрес (основния адрес) и пренасочвате другите три към него.
Кой адрес ще изберете, е въпрос на вкус (урок 2.1). Важното е основният адрес да е един и същ навсякъде: в DNS, в сертификата, в Настройки > Общи (урок 3.1) и в пренасочванията.
Пренасочване с 301, с една стъпка
Пренасочването е отговор на сървъра: „тази страница се намира другаде“. Тогава браузърът сам отива на новия адрес. Кодът показва какъв вид пренасочване е:
| Код | Значение | Употреба |
|---|---|---|
| 301 | Преместено за постоянно | Стандартният избор за http към https и за www към домейна без www (или обратното) |
| 308 | За постоянно, като методът (например изпращане на формуляр) остава същият | Може да се използва и за тази цел; браузърите и търсачките го третират като 301 |
| 302 или 307 | Временно | Само за нещо наистина временно, например страница за поддръжка |
Постоянното пренасочване казва на търсачките, че новият адрес е истинският. При временно пренасочване те продължават да помнят стария адрес.
Обърнете внимание и на веригата. Да кажем, че основният Ви адрес е https://example.com. Тогава искате:
http://www.example.com 301 https://example.com/
http://example.com 301 https://example.com/
https://www.example.com 301 https://example.com/
https://example.com 200Всеки вариант стига до основния адрес с една стъпка. Често се случва следното:
http://www.example.com 301 https://www.example.com/
https://www.example.com 301 https://example.com/Това работи, но струва една допълнителна стъпка (допълнително чакане, особено на мобилни устройства) и едно допълнително TLS ръкостискане. По-лошо е затвореният кръг: уеб сървърът пренасочва към https, WordPress пренасочва обратно към http, защото адресите в настройките все още са с http, и браузърът съобщава „твърде много пренасочвания“. Тогава две настройки работят една срещу друга. Погрижете се само една страна да пренасочва към https (уеб сървърът или контролният панел) и адресите в WordPress вече да сочат към основния адрес.
WordPress също пренасочва сам: ако някой поиска https://www.example.com/contact/, докато адресът на сайта е https://example.com, WordPress пренасочва към https://example.com/contact/. Това работи само ако заявката стигне до WordPress, т.е. ако уеб сървърът насочва и името www към този уебсайт.
Смесено съдържание
Смесено съдържание (mixed content) е https страница, която зарежда елементи през http://: изображение, stylesheet, скрипт, шрифт или вградено видео. Браузърът смята това за опасно, защото тези елементи могат да бъдат променени по пътя.
- Скриптове, stylesheets и iframes през http се блокират от браузърите. Тогава уебсайтът Ви изглежда счупен или някоя функция не работи.
- Изображения, аудио и видео през http модерните браузъри се опитват автоматично да заредят през https; ако това не стане, те се блокират. Тогава катинарчето може да покаже предупреждение.
Откъде идва то:
- Стари връзки в съдържанието Ви: уебсайт, който преди е работел с http, има в хиляди публикации
<img src="http://example.com/wp-content/uploads/...">. WordPress записва тези връзки буквално в базата данни. - Настройки на темата или разширенията с пълен адрес, например лого или фон с
http://. - Външни елементи от друг уебсайт, които са достъпни само през http. Тях трябва да замените или премахнете.
- Адреси в Настройки > Общи, които все още са с http (урок 3.1).
Как да го откриете
Отворете страницата, натиснете F12 и погледнете раздела Console. Браузърът съобщава за всяко смесено съдържание с адреса на елемента. Или потърсете в изходния код на страницата (Ctrl+U) за src="http:// и href="http://. Обикновените връзки в текста към други уебсайтове (<a href="http://...">) не са смесено съдържание; става дума за неща, които страницата зарежда.
Търсене и замяна, но правилно
Решението за старите връзки в съдържанието Ви е да замените всички http://example.com в базата данни с https://example.com. Изкушението е да използвате SQL заявка като:
UPDATE wp_options SET option_value = REPLACE(option_value, 'http://example.com', 'https://example.com');Не правете това. Много настройки на теми, разширения и уиджети се записват сериализирани. Това изглежда така:
s:27:"http://example.com/logo.png";s:27 означава: тук следва текст от 27 знака. След обикновена замяна текстът е 28 знака (добавя се едно s), но пише все още 27. Тогава PHP вече не може да прочете стойността и настройката тихо изчезва: празно меню, изчезнало лого, липсващи уиджети.
Използвайте инструмент, който обновява тези дължини, и винаги първо направете резервно копие (урок 8.1): търсенето и замяната нямат кошче.
- WP-CLI: първо проверете, после действайте. В терминала отидете в папката на Вашия WordPress и първо изпълнете пробния вариант (първия ред), едва след това истинския (втория ред).
wp search-replace 'http://example.com' 'https://example.com' --skip-columns=guid --dry-run
wp search-replace 'http://example.com' 'https://example.com' --skip-columns=guidС --dry-run виждате колко замени биха се направили във всяка таблица, без да се променя нищо. --skip-columns=guid оставя непокътнати постоянните идентификатори на публикациите (колоната guid); WordPress препоръчва те никога да не се променят. Без допълнителна опция WP-CLI работи само с таблиците на WordPress. Ако някое разширение има собствени таблици със същия префикс, добавете --all-tables-with-prefix. Използвайте --all-tables само ако знаете защо: тази опция засяга всяка таблица в базата данни, включително тези на друг уебсайт или приложение.
- Разширение за търсене и замяна, което поддържа сериализирани данни (в директорията с разширения на wordpress.org има няколко). И там първо използвайте пробния режим, а след това отново премахнете разширението.
Никога не заменяйте нещо като example.com без http:// или https:// пред него: така ще засегнете и имейл адреси и други текстове. Целият начин на работа, включително за хора без терминал, е описан в статията от базата знания за търсене и замяна в базата данни на WordPress (вижте Допълнително четене).
На практика: как изглежда това в контролен панел
Като пример използваме DirectAdmin. Други панели имат подобен превключвател за „винаги https“.
- В настройките на домейна включете Force SSL with https redirect (урок 3.1).
- Изберете при домейна дали www да води към домейна без www, или обратното (в DirectAdmin това е в настройките на домейна; иначе с пренасочване чрез Site Redirects или
.htaccess). - Проверете веригата със задачата по-долу или с инструментите за разработчици на браузъра си (раздел Мрежа, отметката „Preserve log“).
Обобщение
- Изберете един каноничен адрес и пренасочете другите три варианта към него с 301 (или 308), с една стъпка.
- Оставете само една страна да пренасочва към https; иначе се получава затворен кръг.
- Смесеното съдържание е https страница, която зарежда елементи през http; конзолата на браузъра показва кои.
- Старите връзки в базата данни заменяте с
wp search-replaceили с разширение, което разбира сериализирани данни, никога с обикновен SQL REPLACE. - Винаги първо резервно копие и първо пробен вариант (
--dry-run); не пипайте колонатаguidи се ограничете до таблиците на WordPress.
Тест (quiz)
Задача
Задача A3.2: Един основен адрес и без смесено съдържание. Въведете своя домейн. Програмата отваря четирите варианта (http и https, с и без www) и проследява пренасочванията. Правилно е: и четирите стигат до един и същ адрес с https, с най-много едно пренасочване за всеки вариант и само с постоянни кодове (301 или 308). След това програмата прочита HTML кода на началната страница и търси скриптове, stylesheets, изображения, iframes и шрифтове, които се зареждат през http://.
Допълнително четене
Тези статии описват стъпките в контролните панели на WebOké; в други панели те работят по подобен начин.
- Ръководство за DirectAdmin 6.4: Посетителите винаги да се пренасочват към https
- Ръководство за DirectAdmin 4.7: Site Redirects: пренасочване на домейн или страница
- Търсене и замяна в базата данни на WordPress
- Задължително пренасочване на посетителите към https
- Безплатен DNS курс 3.4: www, пренасочване и какво не прави DNS
- Смесено съдържание (MDN, на Английски): https://developer.mozilla.org/en-US/docs/Web/Security/Mixed_content
- wp search-replace (developer.wordpress.org, на Английски): https://developer.wordpress.org/cli/commands/search-replace/
