Strona główna  /  Instalacja i migracja  /  Jak przeprowadzić przenoszenie WordPress z http na https?

✦ AI
Cyfrowa kłódka i symbol bezpiecznego połączenia nad serwerem, symbolizujące przejście witryny WordPress na protokół HTTPS.

Jak przeprowadzić przenoszenie WordPress z http na https?

Przenoszenie WordPress z HTTP na HTTPS wymaga trzech działań: aktywowania certyfikatu SSL, zmiany adresów witryny, aktualizacji odnośników w bazie danych oraz ustawienia przekierowania 301 na serwerze. Sama instalacja certyfikatu nie wystarczy, ponieważ pozostawione adresy HTTP mogą powodować mixed content, błędy przekierowań i ostrzeżenia w przeglądarce.

Jak przygotować stronę do migracji?

Najpierw aktywuj certyfikat SSL dla domeny w panelu hostingu. W wielu usługach możesz użyć darmowego certyfikatu Let’s Encrypt. Jeśli zarządzasz własnym serwerem, instalację może przeprowadzić Certbot, na przykład dla Apache:

sudo apt install certbot python3-certbot-apache
sudo certbot --apache -d example.com -d www.example.com

Dla Nginx użyj pakietu python3-certbot-nginx i uruchom Certbota z opcją --nginx. Na hostingu współdzielonym certyfikat zwykle aktywuje się jednym przyciskiem. Przed dalszymi zmianami sprawdź, czy adres https://twojadomena.pl otwiera stronę bez ostrzeżenia o certyfikacie.

Wykonaj pełną kopię plików i bazy danych. Szczególnie ważny jest backup bazy, ponieważ kolejne kroki zmienią zapisane w niej adresy URL.

Nie uruchamiaj operacji search-replace bez kopii zapasowej. Błędna domena, pomylony protokół albo przerwana operacja mogą uszkodzić konfigurację witryny i dane zapisane przez motywy oraz wtyczki.

Przed rozpoczęciem przygotuj:

  • aktywny certyfikat SSL dla wszystkich używanych wariantów domeny
  • kopię plików WordPressa i bazy danych
  • dostęp do panelu WordPressa oraz pliku konfiguracji serwera
  • dostęp SSH i WP-CLI, jeśli hosting je udostępnia

Przenoszenie WordPress z HTTP na HTTPS krok po kroku

  1. Zmień adresy w ustawieniach WordPressa – przejdź do Ustawienia → Ogólne i zmień zarówno „Adres WordPressa (URL)”, jak i „Adres witryny (URL)” z http:// na https://. Zapisz dokładną domenę, łącznie z wariantem www albo bez niego.
  2. Ustaw przekierowanie 301 w Apache – otwórz plik .htaccess w katalogu głównym WordPressa i dodaj reguły przed sekcją # BEGIN WordPress:
    RewriteEngine On
    RewriteCond %{HTTPS} !=on
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

    Stałe przekierowanie 301 kieruje użytkowników i roboty na nowy adres. Nie zastępuj go kodem 302, który oznacza zmianę tymczasową.

  3. Ustaw przekierowanie w Nginx – utwórz osobny blok dla portu 80:
    server {
        listen 80;
        server_name example.com www.example.com;
        return 301 https://$host$request_uri;
    }

    Blok HTTPS powinien nasłuchiwać na porcie 443 i zawierać prawidłowe ścieżki do certyfikatu oraz klucza prywatnego. Po zmianie konfiguracji sprawdź ją poleceniem nginx -t, a następnie przeładuj usługę.

  4. Zaktualizuj adresy w bazie danych przez WP-CLI – przejdź do katalogu instalacji WordPressa i najpierw wykonaj próbę bez zapisywania zmian:
    wp search-replace 'http://example.com' 'https://example.com' --all-tables --dry-run

    Jeśli wynik jest prawidłowy, uruchom właściwą operację:

    wp search-replace 'http://example.com' 'https://example.com' --all-tables

    Dla witryny z wariantem www wykonaj również:

    wp search-replace 'http://www.example.com' 'https://www.example.com' --all-tables

    WP-CLI poprawnie obsługuje dane serializowane, dlatego jest bezpieczniejszy niż bezpośrednie zapytanie SQL z funkcją REPLACE(). Flaga --all-tables obejmuje także niestandardowe tabele używane przez niektóre wtyczki i konstruktory stron.

  5. Wymuś HTTPS w panelu administracyjnym – w pliku wp-config.php, przed komentarzem kończącym edycję pliku, dodaj:
    define('FORCE_SSL_ADMIN', true);

    Jeśli strona działa za load balancerem lub reverse proxy, dodaj także obsługę przekazywanego protokołu:

    if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
        $_SERVER['HTTPS'] = 'on';
    }

Gdy nie masz SSH, możesz zmienić adresy przez narzędzie typu Search and Replace dostępne w panelu hostingu lub przez wtyczkę. Przed uruchomieniem wybierz wszystkie tabele i wykonaj najpierw tryb testowy. Wtyczka może pomóc podczas migracji, ale docelowo lepiej pozostawić przekierowanie w konfiguracji serwera, a adresy poprawić trwale w bazie.

Mixed content i pętle przekierowań – jak je naprawić?

Mixed content pojawia się wtedy, gdy strona otwiera się przez HTTPS, ale ładuje obrazy, arkusze stylów, skrypty albo ramki przez HTTP. Otwórz narzędzia deweloperskie przeglądarki klawiszem F12 i sprawdź zakładkę Console. Komunikaty pokażą dokładne adresy niezabezpieczonych zasobów.

Jeżeli problem dotyczy treści zapisanej w bazie, ponownie sprawdź wynik wp search-replace. Przyjrzyj się też ustawieniom Customizera, widżetom i stronom zbudowanym w Elementorze lub innym konstruktorze. Zakodowane adresy mogą znajdować się w danych motywu, plikach CSS albo kodzie zewnętrznych usług.

Najczęstsze miejsca wymagające kontroli to:

  • adresy obrazów i plików zapisane w treści wpisów
  • URL-e w widżetach, menu i ustawieniach motywu
  • zasoby dodane przez Elementor lub inny page builder
  • zewnętrzne czcionki, skrypty, obrazy i formularze ładowane przez HTTP

Pętla ERR_TOO_MANY_REDIRECTS często występuje za Cloudflare, CDN-em albo load balancerem. Użytkownik łączy się z proxy przez HTTPS, ale proxy komunikuje się z serwerem WordPressa przez HTTP. Serwer uznaje więc żądanie za niezabezpieczone i przekierowuje je ponownie, mimo że przeglądarka już używa HTTPS.

W takiej konfiguracji WordPress musi otrzymać informację o oryginalnym protokole przez nagłówek X-Forwarded-Proto. Jeśli Twój dostawca używa innego nagłówka, sprawdź jego dokumentację. Nie dodawaj kilku konkurencyjnych reguł przekierowań bez zrozumienia ich działania, ponieważ może to stworzyć kolejną pętlę.

Czy po migracji włączać HSTS?

Po potwierdzeniu, że HTTPS działa poprawnie, możesz włączyć HSTS. Nagłówek informuje przeglądarki, aby przez określony czas łączyły się z domeną wyłącznie przez HTTPS. Na początku zastosuj krótszy okres testowy:

Header always set Strict-Transport-Security "max-age=86400"

Jeśli wszystko działa, możesz zwiększyć wartość, na przykład do roku:

Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"

Opcję includeSubDomains włącz dopiero wtedy, gdy każda używana subdomena ma poprawny certyfikat i obsługuje HTTPS. Parametru preload nie dodawaj automatycznie, ponieważ utrudnia późniejsze wycofanie wymogu HTTPS.

Lista kontrolna po migracji

Po zakończeniu prac sprawdź witrynę w kilku niezależnych testach:

  • Adres z prefiksem https:// otwiera się bez ostrzeżenia certyfikatu, a przeglądarka pokazuje prawidłową kłódkę.
  • Wejście na dowolny adres z http:// kończy się jednym przekierowaniem 301 do wersji HTTPS.
  • Konsola przeglądarki nie zgłasza mixed content, a obrazy, arkusze stylów, skrypty i formularze działają poprawnie.
  • Logowanie do panelu, wysyłanie formularzy, płatności i funkcje konstruktorów stron działają po zmianie protokołu.
  • Nagłówek HSTS pojawia się dopiero po potwierdzeniu poprawnego działania całej domeny i jej subdomen.
  • W narzędziach dla webmasterów zgłoszono właściwy wariant adresu HTTPS, a mapa witryny zawiera nowe adresy.

Jeżeli nie masz dostępu do konfiguracji serwera albo napotkasz problemy z uszkodzonymi danymi serializowanymi, wstrzymaj kolejne zmiany i przywróć kopię zapasową. W złożonych instalacjach, szczególnie za reverse proxy, bezpieczniej poprosić administratora serwera o sprawdzenie nagłówków i reguł przekierowań.

Redakcja wpinternals.pl

WordPressa znamy od kuchni – budujemy na nim strony, migrujemy serwisy i optymalizujemy ich wydajność. Piszemy o wtyczkach, motywach, hostingu i bezpieczeństwie tak, by poradzili sobie także początkujący. Dbamy o to, by Twoja strona była szybka, stabilna i bezpieczna.

Może Cię również zainteresować

Potrzebujesz więcej informacji?