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 na ni všechny varianty jediným přesměrováním a vyhledat a opravit smíšený obsah (mixed content).
Klíčové pojmy: kanonická adresa, 301 a 308, řetězec přesměrování, smíšený obsah (mixed content), vyhledání a nahrazení v databázi, serializovaná data
Čtyři adresy, jeden web
Váš web je dostupný na čtyřech adresách:
http://example.com
http://www.example.com
https://example.com
https://www.example.comPro návštěvníka v tom není rozdíl, ale pro vyhledávače jde o čtyři různé adresy se stejným obsahem. Také cookies (například Vaše přihlašovací cookie) platí pro konkrétní název: kdo se přihlásí na www, není přihlášen na doméně bez www. Proto zvolte jednu kanonickou adresu (hlavní adresu) a zbylé 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) i v přesměrováních.
Přesměrování kódem 301, jedním krokem
Přesměrování je odpověď serveru: „tato stránka je jinde“. Prohlížeč pak sám přejde na novou adresu. Kód říká, o jaké přesměrování jde:
| Kód | Význam | Použití |
|---|---|---|
| 301 | Trvale přesunuto | Standardní volba pro přesměrování z http na https a z www na doménu bez www (nebo naopak) |
| 308 | Trvale, přičemž metoda (například odeslání formuláře) zůstává stejná | Lze použít i k tomuto účelu; prohlížeče a vyhledávače s ním zacházejí jako s 301 |
| 302 nebo 307 | Dočasně | Pouze pro něco, co je opravdu dočasné, například stránku údržby |
Trvalé přesměrování říká vyhledávačům, že skutečná je nová adresa. U dočasného si dál pamatují starou adresu.
Dávejte pozor také na řetězec. Řekněme, že Vaše hlavní adresa je https://example.com. Pak chcete:
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 jedním krokem. Často se ale stává tohle:
http://www.example.com 301 https://www.example.com/
https://www.example.com 301 https://example.com/Funguje to, ale stojí to krok navíc (delší čekání, hlavně na mobilu) a jedno TLS handshake navíc. Horší je smyčka: webový server přesměruje na https, WordPress přesměruje zpět na http, protože adresy v nastavení jsou stále na http, a prohlížeč ohlásí „příliš mnoho přesměrování“. V takovém případě proti sobě působí dvě nastavení. Zajistěte, aby na https přesměrovávala jen jedna strana (webový server, nebo panel) a aby adresy ve WordPressu už byly nastavené na hlavní adresu.
WordPress také sám přesměrovává: pokud někdo požádá o https://www.example.com/contact/, zatímco adresa webu je https://example.com, WordPress přesměruje na https://example.com/contact/. Funguje to jen tehdy, když požadavek k WordPressu dorazí, tedy když webový server směruje i název www na tento web.
Smíšený obsah
Smíšený obsah (mixed content) je stránka na https, která načítá části přes http://: obrázek, styl, skript, písmo nebo vložené video. Prohlížeč to považuje za nebezpečné, protože tyto části mohou být cestou pozměněny.
- Skripty, styly a iframy přes http prohlížeče blokují. Váš web pak vypadá rozbitě nebo některá funkce nefunguje.
- Obrázky, zvuk a video přes http se moderní prohlížeče pokusí automaticky načíst přes https; pokud se to nepodaří, zablokují je. Ikona zámku pak může zobrazit varování.
Odkud se 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 tyto odkazy ukládá do databáze doslovně. - Nastavení šablony nebo pluginu s úplnou adresou, například logo nebo pozadí s
http://. - Externí části z jiného webu, které jsou dostupné jen přes http. Ty musíte nahradit nebo odstranit.
- Adresy v Nastavení > Obecné, které jsou stále na http (lekce 3.1).
Jak ho najdete
Otevřete stránku, stiskněte F12 a podívejte se na kartu Console (v české verzi prohlížeče Konzole). Prohlížeč ohlásí každý smíšený obsah i s adresou dané části. Nebo ve zdrojovém kódu stránky (Ctrl+U) vyhledejte src="http:// a href="http://. Odkazy na jiné weby v běžném textu (<a href="http://...">) smíšený obsah nezpůsobují; jde o věci, které stránka načítá.
Vyhledat a nahradit, ale správně
Řešením starých odkazů ve Vašem obsahu je nahradit v databázi všechny http://example.com za https://example.com. Láká to k SQL příkazu jako:
UPDATE wp_options SET option_value = REPLACE(option_value, 'http://example.com', 'https://example.com');Nedělejte to. Mnoho nastavení šablon, pluginů a widgetů je uloženo serializovaně. Vypadá to takto:
s:27:"http://example.com/logo.png";s:27 znamená: následuje text o délce 27 znaků. Po prostém nahrazení má text 28 znaků (přibylo s), ale stále je tam uvedeno 27. PHP pak hodnotu nedokáže přečíst a nastavení tiše zmizí: prázdné menu, zmizelé logo, chybějící widgety.
Použijte nástroj, který tyto délky aktualizuje, a vždy si nejprve udělejte zálohu (lekce 8.1): vyhledání a nahrazení nemá koš.
- WP-CLI: nejdřív se podívat, pak provést. V terminálu přejděte do složky svého WordPressu a nejprve spusťte zkušební běh (první řádek), teprve potom ostrý (druhý řádek).
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=guidS --dry-run uvidíte, kolik nahrazení by v každé tabulce proběhlo, aniž by se cokoli změnilo. --skip-columns=guid ponechá trvalé identifikátory příspěvků (sloupec guid) beze změny; WordPress doporučuje je nikdy neměnit. Bez dalších voleb pracuje WP-CLI jen s tabulkami WordPressu. Pokud má plugin vlastní tabulky se stejnou předponou, přidejte --all-tables-with-prefix. --all-tables použijte jen tehdy, když víte proč: zasáhne každou tabulku v databázi, i tabulky jiného webu nebo aplikace.
- Plugin pro vyhledání a nahrazení, který podporuje serializovaná data (v adresáři pluginů na wordpress.org jich je několik). I tam nejprve použijte zkušební režim a plugin poté zase odstraňte.
Nikdy nenahrazujte něco jako example.com bez http:// nebo https:// na začátku: zasáhli byste i e-mailové adresy a další texty. Celý postup, i pro ty, kdo nemají terminál, najdete v článku znalostní báze o vyhledání a nahrazení v databázi WordPressu (viz Další čtení).
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 vést na doménu bez www, nebo naopak (v DirectAdminu v nastavení domény; jinak přesměrováním přes Přesměrování webu nebo
.htaccess). - Zkontrolujte řetězec pomocí úkolu níže nebo pomocí vývojářských nástrojů prohlížeče (karta Síť, zaškrtávací políčko „Zachovat protokol“).
Shrnutí
- Zvolte jednu kanonickou adresu a nechte na ni zbylé tři varianty vést kódem 301 (nebo 308), jedním krokem.
- Na https ať přesměrovává jen jedna strana; jinak vznikne smyčka.
- Smíšený obsah je stránka na https, která načítá čá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 prostým SQL REPLACE. - Vždy nejprve záloha a nejprve zkušební běh (
--dry-run); sloupecguidnechte beze změny a držte se tabulek WordPressu.
Kvíz
Úkol
Úkol A3.2: Jedna hlavní adresa a žádný smíšený obsah. Zadejte svou doménu. Program otevře čtyři varianty (http a https, s www i bez www) a sleduje přesměrování. Správně je: 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 načte HTML domovské stránky a hledá skripty, styly, obrázky, iframy a písma, které se načítají přes http://.
Další čtení
Tyto články popisují kroky v panelech WebOké; v jiných panelech to funguje podobně.
- 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: přesměrování domény nebo stránky
- Vyhledávání a nahrazování v databázi WordPressu
- Vynutit 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/
