Модул 3 · 3.2
www, пренасочване и смесено съдържание
Модул 3: Адрес, https и потребители · Време за четене: 9 минути
Учебна цел: След този урок ще можете да изберете един основен адрес, да пренасочите всички варианти към него с едно пренасочване и да откриете и отстраните смесено съдържание.
Ключови понятия: канонизиран адрес, 301 и 308, верига от пренасочвания, смесено съдържание (mixed content), търсене и замяна в базата данни, сериализирани данни
Четири адреса, един сайт
Вашият сайт е достъпен през четири адреса:
http://example.com
http://www.example.com
https://example.com
https://www.example.comЗа посетителя това няма значение, но за търсачките това са четири различни адреса с едно и също съдържание. Също и бисквитките (като Вашата бисквитка за вход) важат за конкретно име: който влезе през www, не е влязъл през голото име. Затова избирате един канонизиран адрес (основния адрес) и пренасочвате останалите три към него.
Кой адрес ще изберете е въпрос на предпочитание (урок 2.1). Важното е основният адрес да е еднакъв навсякъде: в DNS, в сертификата, в Настройки > Общи (урок 3.1) и в пренасочванията.
Пренасочване с 301, в една стъпка
Пренасочването е отговор от сървъра: „тази страница се намира другаде“. Браузърът автоматично отива на новия адрес. Кодът показва какъв вид пренасочване е това:
| Код | Значение | Приложение |
|---|---|---|
| 301 | Преместено за постоянно | Постоянният избор за http към https и за 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://: изображение, стилов лист, скрипт, шрифт или вградено видео. Браузърът счита това за несигурно, защото тези елементи могат да бъдат променени по пътя.
- Скриптове, стилови листове и iframe-ове през 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 вече не може да прочете стойността и настройката изчезва безследно: празно меню, изчезнало лого, липсващи уиджети.
Използвайте инструмент, който актуализира тези дължини:
- WP-CLI: първо проверете, после изпълнете.
wp search-replace 'http://example.com' 'https://example.com' --all-tables --dry-run
wp search-replace 'http://example.com' 'https://example.com' --all-tablesС --dry-run виждате колко замени биха се извършили във всяка таблица, без да се прави реална промяна.
- Разширение за търсене и замяна, което поддържа сериализирани данни (има няколко такива в папката с разширения на wordpress.org). След използване отново премахнете разширението.
Винаги първо направете резервно копие (урок 8.1). Никога не заменяйте нещо като example.com без http:// пред него: иначе ще засегнете и имейл адреси, и други текстове.
На практика: ето как изглежда в панел
Като пример използваме DirectAdmin. Други панели имат подобен превключвател за „винаги https“.
- В настройките на домейна включете Forceer SSL with https omleiding (урок 3.1).
- При домейна изберете дали www трябва да сочи към голото име или обратно (в DirectAdmin това е в настройките на домейна; иначе чрез пренасочване със Site Redirects или
.htaccess). - Проверете веригата с командата по долу или с инструментите за разработчици на Вашия браузър (раздел Network, отметка „Preserve log“).
Обобщение
- Изберете един канонизиран адрес и оставете другите три варианта да стигат до него с 301 (или 308), в една стъпка.
- Оставете само една страна да пренасочва към https; иначе получавате затворен кръг.
- Смесеното съдържание е https страница, която зарежда елементи през http; конзолата на браузъра показва кои.
- Старите връзки в базата данни заменяйте с
wp search-replaceили разширение, което разбира сериализирани данни, никога с обикновен SQL REPLACE. - Винаги първо резервно копие, и първо пробно изпълнение.
Тест (quiz)
Задача
Задача A3.2: Един основен адрес и без смесено съдържание. Въведете Вашия домейн. Програмата отваря четирите варианта (http и https, с и без www) и проследява пренасочванията. Добре е, ако всичките четири стигат до един и същ адрес с https, с най-много едно пренасочване на вариант и само с постоянни кодове (301 или 308). След това програмата чете HTML кода на началната страница и търси скриптове, стилови листове, изображения, iframe-ове и шрифтове, които се зареждат през http://.
Допълнително четене
Тези статии описват стъпките в панелите на WebOké; в други панели работят по подобен начин.
- Ръководство за DirectAdmin 6.4: Посетителите винаги да се пренасочват към https
- Ръководство за DirectAdmin 4.7: Site Redirects: пренасочване на домейн или страница
- Задължително пренасочване на посетителите към 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/
