Modul 3 · 3.2
www, přesměrování a smíšený obsah
Modul 3: Adresa, https a uživatelé · Doba čtení: 9 minut
Cíl lekce: Po této lekci dokážete zvolit jednu hlavní adresu, přesměrovat všechny varianty na ni pomocí jediného přesměrování a odhalit i vyřešit smíšený obsah.
Klíčové pojmy: kanonická adresa, 301 a 308, řetězec přesměrování, smíšený obsah (mixed content), hledání a nahrazování v databázi, serializovaná data
Čtyři adresy, jeden web
Váš web je dostupný přes čtyři adresy:
http://example.com
http://www.example.com
https://example.com
https://www.example.comPro návštěvníka na tom nezáleží, ale pro vyhledávače jde o čtyři různé adresy se stejným obsahem. I cookies (jako Vaše přihlašovací cookie) platí podle názvu: kdo se přihlásí na www, není přihlášený na doméně bez www. Proto si zvolte jednu kanonickou adresu (hlavní adresu) a ostatní tři na ni přesměrujte.
Kterou zvolíte, je věc vkusu (lekce 2.1). Důležité je, aby hlavní adresa byla všude stejná: v DNS, v certifikátu, v Nastavení > Obecné (lekce 3.1) a v přesměrováních.
Přesměrování pomocí 301, v jednom kroku
Přesměrování je odpověď serveru: "tato stránka se nachází jinde". Prohlížeč pak sám přejde na novou adresu. Kód udává, o jaký typ přesměrování jde:
| Kód | Význam | Použití |
|---|---|---|
| 301 | Trvale přesunuto | Standardní volba pro přechod z http na https a z www na doménu bez www (nebo naopak) |
| 308 | Trvale, a metoda (například odeslání formuláře) zůstává stejná | Lze použít i pro tento účel; prohlížeče a vyhledávače jej považují za 301 |
| 302 nebo 307 | Dočasně | Pouze pro něco, co je skutečně dočasné, například stránku údržby |
Trvalé přesměrování sděluje vyhledávačům, že nová adresa je ta skutečná. U dočasného si i nadále pamatují starou adresu.
Dávejte pozor i na řetězec přesměrování. Řekněme, že Vaše hlavní adresa je https://example.com. Pak chcete, aby to vypadalo takto:
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 200Každá varianta se dostane na hlavní adresu v jednom kroku. Často se ale stává toto:
http://www.example.com 301 https://www.example.com/
https://www.example.com 301 https://example.com/To sice funguje, ale stojí to navíc jeden krok (další čekací dobu, zejména na mobilu) a navíc TLS handshake. Horší je smyčka: webový server přesměruje na https, WordPress přesměruje zpět na http, protože adresy v nastavení ještě ukazují na http, a prohlížeč nahlásí "příliš mnoho přesměrování". V takovém případě proti sobě působí dvě nastavení. Zajistěte, aby přesměrování na https prováděla pouze jedna strana (webový server nebo panel) a aby adresy ve WordPressu již byly nastavené na hlavní adresu.
WordPress sám také přesměrovává: pokud někdo zadá https://www.example.com/contact/, zatímco adresa webu je https://example.com, WordPress přesměruje na https://example.com/contact/. To ale funguje pouze tehdy, pokud požadavek dorazí až k WordPressu, tedy pokud webový server nechá název www směřovat na tentýž web.
Smíšený obsah
Smíšený obsah (mixed content) je https stránka, která načítá některé součásti přes http://: obrázek, styl (stylesheet), skript, písmo nebo vložené video. Prohlížeč to považuje za nebezpečné, protože tyto součásti mohou být po cestě pozměněny.
- Skripty, styly a iframy přes http prohlížeče blokují. Váš web pak může vypadat rozbitě nebo některá funkce nebude pracovat.
- Obrázky, zvuk a video přes http se moderní prohlížeče pokusí automaticky načíst přes https; pokud se to nepovede, budou zablokovány. U zámku se pak může zobrazit varování.
Odkud se to bere:
- Staré odkazy ve Vašem obsahu: web, který dříve běžel na http, má v tisících příspěvků
<img src="http://example.com/wp-content/uploads/...">. WordPress ukládá tyto odkazy do databáze doslovně. - Nastavení šablony nebo pluginu s plnou adresou, například logo nebo pozadí s
http://. - Externí součásti z jiného webu, který je dostupný pouze přes http. Ty je potřeba nahradit nebo odstranit.
- Adresy v Nastavení > Obecné, které stále ukazují na http (lekce 3.1).
Jak to najít
Otevřete stránku, stiskněte F12 a podívejte se na kartu Konzole. Prohlížeč nahlásí každý smíšený obsah s adresou dané součásti. Nebo ve zdrojovém kódu stránky (Ctrl+U) vyhledejte src="http:// a href="http://. Běžné odkazy na jiné weby v textu (<a href="http://...">) nezpůsobují smíšený obsah; jde o věci, které stránka načítá.
Hledání a nahrazování, ale pořádně
Řešením starých odkazů ve Vašem obsahu je nahradit všechny výskyty http://example.com v databázi výrazem https://example.com. Pokušení je použít SQL příkaz jako:
UPDATE wp_options SET option_value = REPLACE(option_value, 'http://example.com', 'https://example.com');To nedělejte. Mnoho nastavení šablon, pluginů a widgetů je uloženo serializovaně. To vypadá takto:
s:27:"http://example.com/logo.png";s:27 znamená: následuje text o délce 27 znaků. Po obyčejném nahrazení má text 28 znaků (přibylo jedno s), ale stále je tam uvedeno 27. PHP pak již hodnotu nedokáže přečíst a nastavení potichu zmizí: prázdné menu, zmizelé logo, chybějící widgety.
Použijte nástroj, který tyto délky aktualizuje:
- WP-CLI: nejprve se podívat, pak teprve udělat.
wp search-replace 'http://example.com' 'https://example.com' --all-tables --dry-run
wp search-replace 'http://example.com' 'https://example.com' --all-tablesPomocí --dry-run uvidíte, kolik nahrazení by proběhlo v každé tabulce, aniž by se cokoli skutečně změnilo.
- Plugin pro hledání a nahrazování, který podporuje serializovaná data (v adresáři pluginů na wordpress.org jich je více). Plugin poté zase odstraňte.
Vždy nejprve vytvořte zálohu (lekce 8.1). Nikdy také nenahrazujte něco jako example.com bez http:// před ním: zasáhli byste tím i e-mailové adresy a další texty.
V praxi: jak to vypadá v panelu
Jako příklad použijeme DirectAdmin. Jiné panely mají podobný přepínač pro "vždy https".
- V nastavení domény zapněte Vynutit SSL s přesměrováním na https (lekce 3.1).
- U domény zvolte, zda má www směřovat na doménu bez www, nebo naopak (v DirectAdminu v nastavení domény; jinde pomocí přesměrování přes Přesměrování webu nebo
.htaccess). - Zkontrolujte řetězec přesměrování pomocí příkazu níže nebo pomocí vývojářských nástrojů Vašeho prohlížeče (karta Síť, zaškrtnutí "Zachovat protokol").
Shrnutí
- Zvolte si jednu kanonickou adresu a nechte ostatní tři varianty přesměrovat na ni pomocí kódu 301 (nebo 308), v jednom kroku.
- Nechte přesměrovávat na https pouze jednu stranu; jinak vznikne smyčka.
- Smíšený obsah je https stránka, která načítá některé součásti přes http; konzole prohlížeče ukáže, které.
- Staré odkazy v databázi nahrazujte pomocí
wp search-replacenebo pluginu, který rozumí serializovaným datům, nikdy pomocí obyčejného SQL příkazu REPLACE. - Vždy nejprve záloha a nejprve zkušební kolo.
Kvíz
Úkol
Úkol A3.2: Jedna hlavní adresa a žádný smíšený obsah. Zadejte svoji doménu. Program otevře všechny čtyři varianty (http a https, s www a bez www) a sleduje přesměrování. V pořádku je, pokud všechny čtyři skončí na stejné adrese s https, s nejvýše jedním přesměrováním na variantu a pouze s trvalými kódy (301 nebo 308). Poté program přečte HTML domovské stránky a vyhledá skripty, styly, obrázky, iframy a písma, které se načítají přes http://.
Doporučené čtení
Tyto články popisují jednotlivé kroky v panelech WebOké; v jiných panelech fungují obdobně.
- Příručka k DirectAdmin 6.4: Návštěvníky vždy přesměrovat na https
- Příručka k DirectAdmin 4.7: Přesměrování webu: jak přesměrovat doménu nebo stránku
- Povinné přesměrování návštěvníků na https
- Bezplatný DNS kurz 3.4: www, přesměrování a co DNS nedělá
- Smíšený obsah (MDN, anglicky): https://developer.mozilla.org/en-US/docs/Web/Security/Mixed_content
- wp search-replace (developer.wordpress.org, anglicky): https://developer.wordpress.org/cli/commands/search-replace/
