Moduł 3 · 3.2
www, przekierowania i treści mieszane
Moduł 3: Adres, https i użytkownicy · Czas czytania: 9 minut
Cel lekcji: Po tej lekcji będą Państwo potrafili wybrać jeden adres główny, skierować do niego wszystkie warianty jednym przekierowaniem oraz wykryć i usunąć treści mieszane.
Kluczowe pojęcia: adres kanoniczny, 301 i 308, łańcuch przekierowań, treści mieszane (mixed content), wyszukiwanie i zamiana w bazie danych, dane serializowane
Cztery adresy, jedna strona
Państwa strona internetowa jest dostępna pod czterema adresami:
http://example.com
http://www.example.com
https://example.com
https://www.example.comDla odwiedzającego nie ma to znaczenia, ale dla wyszukiwarek są to cztery różne adresy z tą samą treścią. Również pliki cookie (na przykład cookie logowania) obowiązują dla konkretnej nazwy: kto zaloguje się na www, nie jest zalogowany na domenie bez www. Dlatego wybierają Państwo jeden adres kanoniczny (adres główny) i przekierowują do niego pozostałe trzy.
Który adres Państwo wybiorą, to kwestia gustu (lekcja 2.1). Ważne jest, aby adres główny był wszędzie taki sam: w DNS, w certyfikacie, w Ustawienia > Ogólne (lekcja 3.1) oraz w przekierowaniach.
Przekierowanie kodem 301, w jednym kroku
Przekierowanie to odpowiedź serwera: "ta strona znajduje się gdzie indziej". Przeglądarka sama przechodzi wtedy pod nowy adres. Kod informuje, jakiego rodzaju jest to przekierowanie:
| Kod | Znaczenie | Zastosowanie |
|---|---|---|
| 301 | Przeniesiono na stałe | Standardowy wybór dla przejścia z http na https oraz z www na domenę bez www (lub odwrotnie) |
| 308 | Na stałe, a metoda (na przykład wysłanie formularza) pozostaje ta sama | Również można go użyć w tym celu; przeglądarki i wyszukiwarki traktują go jak 301 |
| 302 lub 307 | Tymczasowo | Tylko dla czegoś, co naprawdę jest tymczasowe, na przykład strony konserwacji |
Stałe przekierowanie informuje wyszukiwarki, że nowy adres jest tym właściwym. Przy tymczasowym zapamiętują one nadal stary adres.
Proszę zwrócić uwagę również na łańcuch. Załóżmy, że adresem głównym jest https://example.com. Wtedy chcemy uzyskać:
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żdy wariant trafia na adres główny w jednym kroku. Co często się zdarza:
http://www.example.com 301 https://www.example.com/
https://www.example.com 301 https://example.com/To działa, ale kosztuje dodatkowy krok (dodatkowy czas oczekiwania, zwłaszcza na urządzeniach mobilnych) i dodatkowe nawiązanie połączenia TLS. Gorsza jest pętla: serwer WWW przekierowuje na https, WordPress przekierowuje z powrotem na http, ponieważ adresy w ustawieniach nadal zaczynają się od http, a przeglądarka zgłasza "zbyt wiele przekierowań". Dwie konfiguracje działają wtedy przeciwko sobie. Proszę zadbać o to, aby przekierowanie na https wykonywał tylko jeden element (serwer WWW albo panel), a adresy w WordPressie były już ustawione na adres główny.
WordPress również sam przekierowuje: jeśli ktoś wywoła https://www.example.com/contact/, a adresem witryny jest https://example.com, WordPress przekieruje na https://example.com/contact/. Działa to jednak tylko wtedy, gdy żądanie dotrze do WordPressa, czyli gdy serwer WWW kieruje nazwę www również do tej strony.
Treści mieszane
Treści mieszane (mixed content) to strona https, która ładuje elementy przez http://: obrazek, arkusz stylów, skrypt, czcionkę lub osadzony film. Przeglądarka uznaje to za niebezpieczne, ponieważ takie elementy mogą zostać zmienione w trakcie przesyłania.
- Skrypty, arkusze stylów i ramki iframe ładowane przez http są blokowane przez przeglądarki. Strona wygląda wtedy na uszkodzoną albo jakaś funkcja nie działa.
- Obrazy, audio i wideo ładowane przez http nowoczesne przeglądarki próbują automatycznie pobrać przez https; jeśli to się nie uda, zostają zablokowane. Kłódka może wtedy pokazywać ostrzeżenie.
Skąd się to bierze:
- Stare linki w treści: strona, która wcześniej działała na http, ma w tysiącach wpisów
<img src="http://example.com/wp-content/uploads/...">. WordPress zapisuje te linki dosłownie w bazie danych. - Ustawienia motywu lub wtyczki z pełnym adresem, na przykład logo lub tło z
http://. - Zewnętrzne elementy z innej strony, dostępne wyłącznie przez http. Trzeba je zastąpić lub usunąć.
- Adresy w Ustawienia > Ogólne, które nadal zaczynają się od http (lekcja 3.1).
Jak to znaleźć
Proszę otworzyć stronę, nacisnąć F12 i zajrzeć do karty Konsola. Przeglądarka zgłasza każdą treść mieszaną wraz z adresem danego elementu. Można też przeszukać kod źródłowy strony (Ctrl+U) pod kątem src="http:// i href="http://. Zwykłe linki do innych stron w tekście (<a href="http://...">) nie powodują treści mieszanych; chodzi o elementy, które strona ładuje.
Wyszukiwanie i zamiana, ale prawidłowo
Rozwiązaniem problemu starych linków w treści jest zastąpienie w bazie danych wszystkich wystąpień http://example.com przez https://example.com. Kusi polecenie SQL w rodzaju:
UPDATE wp_options SET option_value = REPLACE(option_value, 'http://example.com', 'https://example.com');Prosimy tego nie robić. Wiele ustawień motywów, wtyczek i widżetów jest zapisanych w postaci serializowanej. Wygląda to tak:
s:27:"http://example.com/logo.png";Zapis s:27 oznacza: tutaj następuje tekst o długości 27 znaków. Po prostej zamianie tekst ma 28 znaków (doszło s), ale nadal widnieje 27. PHP nie potrafi wtedy odczytać wartości i ustawienie po cichu przestaje działać: puste menu, zniknięte logo, brakujące widżety.
Proszę użyć narzędzia, które aktualizuje te długości, i zawsze najpierw wykonać kopię zapasową (lekcja 8.1): wyszukiwanie i zamiana nie ma kosza.
- WP-CLI: najpierw sprawdzić, potem wykonać. Proszę przejść w terminalu do katalogu z WordPressem i najpierw uruchomić przebieg próbny (pierwszy wiersz), a dopiero potem właściwy (drugi wiersz).
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=guidDzięki --dry-run widzą Państwo, ile zamian zostałoby wykonanych w każdej tabeli, bez wprowadzania jakichkolwiek zmian. --skip-columns=guid pozostawia w spokoju stałe identyfikatory wpisów (kolumna guid); WordPress zaleca, aby nigdy ich nie zmieniać. Bez dodatkowej opcji WP-CLI działa tylko na tabelach WordPressa. Jeśli wtyczka ma własne tabele z tym samym prefiksem, proszę dodać --all-tables-with-prefix. Opcji --all-tables proszę używać tylko wtedy, gdy wiedzą Państwo dlaczego: obejmuje ona każdą tabelę w bazie danych, także tabele innej strony lub aplikacji.
- Wtyczka do wyszukiwania i zamiany, która obsługuje dane serializowane (w katalogu wtyczek na wordpress.org jest ich kilka). Również tutaj proszę najpierw użyć trybu próbnego, a potem ponownie usunąć wtyczkę.
Proszę nigdy nie zamieniać czegoś takiego jak example.com bez poprzedzającego http:// lub https://: w ten sposób zmienią Państwo również adresy e-mail i inne teksty. Cały sposób postępowania, także dla osób bez dostępu do terminala, opisuje artykuł w bazie wiedzy o wyszukiwaniu i zamianie w bazie danych WordPressa (patrz Dalsza lektura).
W praktyce: jak to wygląda w panelu
Jako przykład używamy DirectAdmin. Inne panele mają podobny przełącznik dla opcji "zawsze https".
- W ustawieniach domeny proszę włączyć Wymuś SSL z przekierowaniem https (lekcja 3.1).
- Proszę wybrać przy domenie, czy www ma prowadzić do domeny bez www, czy odwrotnie (w DirectAdmin w ustawieniach domeny; w innym przypadku za pomocą przekierowania w Przekierowania lub w
.htaccess). - Proszę sprawdzić łańcuch za pomocą zadania poniżej lub narzędzi deweloperskich przeglądarki (karta Sieć, pole wyboru "Zachowaj log").
Podsumowanie
- Proszę wybrać jeden adres kanoniczny i skierować do niego pozostałe trzy warianty kodem 301 (lub 308), w jednym kroku.
- Przekierowanie na https powinien wykonywać tylko jeden element; w przeciwnym razie powstaje pętla.
- Treści mieszane to strona https, która ładuje elementy przez http; konsola przeglądarki pokazuje, które to są.
- Stare linki w bazie danych zamienia się poleceniem
wp search-replacelub wtyczką, która rozumie dane serializowane, nigdy prostym SQL REPLACE. - Zawsze najpierw kopia zapasowa i przebieg próbny (
--dry-run); kolumnęguidnależy zostawić w spokoju i ograniczyć się do tabel WordPressa.
Quiz
Zadanie
Zadanie A3.2: Jeden adres główny i brak treści mieszanych. Proszę wpisać swoją domenę. Program otwiera cztery warianty (http i https, z www i bez) i śledzi przekierowania. Prawidłowy wynik: wszystkie cztery prowadzą do tego samego adresu z https, z najwyżej jednym przekierowaniem na wariant i wyłącznie kodami stałymi (301 lub 308). Następnie program odczytuje HTML strony głównej i szuka skryptów, arkuszy stylów, obrazów, ramek iframe i czcionek ładowanych przez http://.
Dalsza lektura
Te artykuły opisują kroki w panelach WebOké; w innych panelach przebiega to podobnie.
- Instrukcja DirectAdmin 6.4: Zawsze przekierowuj odwiedzających na https
- Instrukcja DirectAdmin 4.7: Przekierowania: przekierowanie domeny lub strony
- Wyszukiwanie i zamiana w bazie danych WordPress
- Wymuszaj przekierowanie odwiedzających na https
- Bezpłatny kurs DNS 3.4: www, przekierowanie i czego DNS nie robi
- Treści mieszane (MDN, po angielsku): https://developer.mozilla.org/en-US/docs/Web/Security/Mixed_content
- wp search-replace (developer.wordpress.org, po angielsku): https://developer.wordpress.org/cli/commands/search-replace/
