naprawa-stron.pl Online 24/7 Zgłoś awarię

Strona przekierowuje na inną stronę – jak znaleźć i usunąć przekierowanie

Autor: Grzegorz Wojterzak. Aktualizacja: 12 października 2026. Czas czytania: około 12 minut.

$ diagnoza złośliwe przekierowanie
Typowe objawy
Klienci lądują na kasynie, aptece lub fałszywej loterii, a Ty widzisz normalną stronę
Najczęstsza przyczyna
Kod w .htaccess, index.php, bazie danych lub skrypt z obcej domeny po włamaniu
Czas naprawy
Od godziny do kilku godzin, dłużej, gdy kod się odtwarza
Czy zrobisz to sam?
Tak, jeśli umiesz użyć FTP, phpMyAdmin i terminala

Szybka odpowiedź

Jeśli strona przekierowuje na inną stronę tylko niektórych odwiedzających, to prawie zawsze złośliwe przekierowanie warunkowe po włamaniu. Wywołaj je w oknie prywatnym, na telefonie przez dane komórkowe albo poleceniem curl z nagłówkami telefonu i Google, a potem sprawdź po kolei .htaccess, index.php, adresy siteurl i home w bazie, skrypty we wpisach, wtyczki i DNS. Usuń źródło, mechanizm, który je odtwarza, oraz lukę, przez którą weszli atakujący.

To jedna z najbardziej frustrujących awarii. Klient pisze, że Twoja strona „otwiera kasyno”, a Ty wchodzisz i widzisz wszystko w porządku. To nie przypadek. Złośliwe przekierowania są pisane tak, żeby właściciel strony ich nie zauważył, a odwiedzający z wyszukiwarki tak.

W tym poradniku pokazuję, jak wywołać takie przekierowanie na własnym sprzęcie, gdzie zwykle siedzi jego kod i jak je usunąć tak, żeby nie wróciło. Na końcu opisuję niewinne przyczyny, które wyglądają podobnie: źle ustawiony adres strony, pętlę przekierowań HTTPS i agresywne reklamy.

Dlaczego Ty nie widzisz przekierowania, a klienci tak

Złośliwy kod sprawdza kilka warunków, zanim przekieruje odwiedzającego. Typowe filtry:

  • Tylko urządzenia mobilne. Kod czyta nagłówek User-Agent i przekierowuje tylko telefony.
  • Tylko wejścia z wyszukiwarki. Kod sprawdza nagłówek Referer. Wejście z zakładki lub wpisanie adresu nie uruchamia przekierowania, kliknięcie w wynik Google tak.
  • Tylko pierwsze wejście. Po przekierowaniu kod zapisuje ciasteczko albo zapamiętuje adres IP i przez kolejne godziny lub dni nie przekierowuje tej samej osoby.
  • Nie dla zalogowanych. Jeśli przeglądarka ma ciasteczko zalogowanego użytkownika WordPressa, kod nic nie robi.
  • Nie dla robotów Google. Googlebot dostaje zwykłą stronę, żeby infekcja dłużej pozostała niewykryta.
Kto widzi złośliwe przekierowanie, a kto nie Złośliwy kod w środku jako filtr. Po lewej odwiedzający: zalogowany administrator z zakładki, robot Google, ten sam telefon przy drugim wejściu, nowy użytkownik telefonu z wyników Google. Pierwsze trzy dostają normalną stronę. Tylko ostatni zostaje przekierowany na obcą stronę. Ty, zalogowany admin komputer, wejście z zakładki Robot Google User-Agent Googlebot Klient, drugie wejście ciasteczko lub zapamiętane IP Nowy klient na telefonie pierwsze wejście, kliknięcie w wynik Google Złośliwy kod zalogowany? bot wyszukiwarki? już przekierowany? telefon? Referer: google? 3 × nie i 2 × tak: przekieruj Normalna strona Właściciel nic nie widzi, Google indeksuje poprawną treść Obca strona kasyno, apteka, „wygrałeś nagrodę”
Kod sprawdza kilka warunków naraz. Przekierowanie widzi tylko ten, kto spełnia wszystkie, najczęściej nowy odwiedzający z telefonu, który kliknął w wynik wyszukiwania.

Jak wywołać i zbadać przekierowanie

Zanim zaczniesz szukać kodu, potwierdź, że przekierowanie istnieje, i ustal, przy jakich warunkach działa. To podpowie, gdzie go szukać.

  1. Okno prywatne na komputerze

    Otwórz okno prywatne (incognito), wpisz w Google nazwę firmy lub frazę, na którą strona jest widoczna, i kliknij wynik. Okno prywatne nie ma Twoich ciasteczek logowania, a kliknięcie w wynik wysyła nagłówek Referer z Google.

  2. Telefon przez dane komórkowe

    Wyłącz Wi-Fi, żeby telefon miał inny adres IP niż Twój komputer, i powtórz to samo w trybie prywatnym przeglądarki. Jeśli przekierowanie zadziała raz, a przy drugiej próbie już nie, kod zapamiętuje odwiedzających. Wtedy kolejne próby rób z nowego okna prywatnego, a najlepiej po zmianie adresu IP, np. po włączeniu i wyłączeniu trybu samolotowego.

  3. curl z nagłówkami telefonu i Google

    To najbardziej powtarzalna metoda. Polecenie nie wykonuje JavaScriptu, więc pokaże tylko przekierowania po stronie serwera, ale za to dokładnie:

    # jak zwykła przeglądarka, bez Referer
    curl -sI https://twojadomena.pl/
    
    # jak telefon, który przyszedł z Google
    UA="Mozilla/5.0 (Linux; Android 14; Pixel 8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0 Mobile Safari/537.36"
    curl -sI -A "$UA" -e "https://www.google.com/" https://twojadomena.pl/
    
    # pełna ścieżka przekierowań
    curl -sIL -A "$UA" -e "https://www.google.com/" https://twojadomena.pl/ | grep -iE "^(HTTP|location)"

    Szukasz odpowiedzi 301, 302 lub 307 z nagłówkiem Location wskazującym obcą domenę. Jeśli tylko drugie polecenie zwraca przekierowanie, kod działa po stronie serwera i reaguje na nagłówki. Szukaj go w .htaccess i plikach PHP.

    Opcja -I wysyła zapytanie typu HEAD. Część złośliwego kodu reaguje tylko na zwykłe zapytanie GET, więc jeśli nic nie widzisz, powtórz test w tej formie: curl -s -o /dev/null -D - -A "$UA" -e "https://www.google.com/" https://twojadomena.pl/.

  4. Narzędzia deweloperskie przeglądarki

    Jeśli curl nie pokazuje przekierowania, a przeglądarka tak, to przekierowanie robi JavaScript. Otwórz narzędzia deweloperskie (F12), w zakładce Sieć zaznacz zachowywanie dziennika („Preserve log”) i przełącz widok na urządzenie mobilne. Wejdź na stronę i zobacz, który skrypt pobiera się tuż przed przejściem na obcą domenę. Najczęściej to plik z domeny, której nie znasz, albo skrypt wpisany bezpośrednio w kod strony.

    Karta Sieć w narzędziach deweloperskich Chrome ze skryptem jquery.min.js z obcej domeny i przekierowaniem telefonu
    Zrzut ekranuKarta Sieć z włączonym „Zachowaj dziennik” (Preserve log) i filtrami Dokument oraz JS, wejście jak z telefonu. Fałszywy jquery.min.js ładuje się z obcej domeny (kolumna Domena), a chwilę później telefon ląduje na stronie z „nagrodą”. Zrzut z testowego środowiska, obie domeny są fikcyjne.

Gdzie siedzi kod przekierowania

To drzewo pomaga zawęzić poszukiwania na podstawie tego, co ustaliłeś w poprzednim kroku:

Drzewo diagnostyczne: gdzie szukać źródła przekierowania Pierwsze pytanie: czy przekierowuje każdy adres w domenie, także nieistniejący. Jeśli tak i pliki są nietknięte, sprawdź DNS, rejestratora i wygaśnięcie domeny. Jeśli nie, drugie pytanie: czy curl pokazuje nagłówek Location na obcą domenę. Jeśli tak, przekierowanie po stronie serwera: .htaccess, index.php, wp-config.php, wtyczki, mu-plugins. Jeśli nie, przekierowanie w JavaScript: skrypty we wpisach i opcjach w bazie, pliki motywu, skrypt z obcej domeny. Osobno: przekierowanie na własną domenę w pętli lub pod inny adres to ustawienia siteurl i home lub HTTPS. Przekierowuje każdy adres w domenie, także taki, którego nie ma na serwerze? tak Domena lub DNS rekordy A i CNAME, przekierowanie u rejestratora, data wygaśnięcia, przejęte konto rejestratora nie curl z nagłówkami telefonu i Google pokazuje Location na obcą domenę? tak Po stronie serwera (PHP / Apache) .htaccessw każdym katalogu index.phpkod na początku wp-config.phpobcy include mu-plugins/ukryta wtyczka plugins/, themes/zmienione pliki Plus zadania cron, które to odtwarzają nie W przeglądarce (JavaScript) wp_posts<script> w treści wp_optionswidżety, ustawienia header.phpwstawka w motywie wtyczki z kodemnagłówek i stopka obca domena .jspodmieniony skrypt Także skrypty reklam i liczników Przekierowanie na własną domenę w pętli lub pod stary adres to zwykle ustawienia siteurl, home albo HTTPS, a nie infekcja.
Pierwsze pytanie oszczędza najwięcej czasu: jeśli przekierowuje cała domena, problem jest poza plikami strony.

Szczegóły do każdego miejsca:

.htaccess

Złośliwe reguły wyglądają zwykle tak jak poniżej. Warunek sprawdza nagłówek Referer lub User-Agent, a reguła przenosi na obcą domenę:

RewriteCond %{HTTP_REFERER} (google|bing|yahoo|facebook) [NC]
RewriteCond %{HTTP_USER_AGENT} (android|iphone|mobile) [NC]
RewriteRule ^(.*)$ https://obca-domena.example/ [R=302,L]

Sprawdź wszystkie pliki .htaccess, nie tylko główny. Atakujący często dopisują je w podkatalogach albo zostawiają setki pustych linii, żeby złośliwa reguła znalazła się daleko poza ekranem edytora.

find . -name ".htaccess" -printf "%TY-%Tm-%Td %p\n" | sort
grep -rniE "http_referer|http_user_agent" --include=.htaccess .

Standardowy .htaccess WordPressa zawiera tylko blok # BEGIN WordPress … # END WordPress oraz reguły wpisane przez Ciebie lub wtyczki, np. cache czy wymuszenie HTTPS. Jego wzorcową treść znajdziesz w dokumentacji developer.wordpress.org.

index.php, wp-config.php i pliki PHP

Główny index.php WordPressa ma kilkanaście linii i ładuje wp-blog-header.php. Wszystko ponad to jest podejrzane. Przekierowania w PHP używają funkcji header("Location: …"), często zaciemnionej przez base64_decode lub złożenie nazwy z kawałków. Sprawdź też katalog wp-content/mu-plugins, bo pliki z niego ładują się zawsze i nie widać ich na zwykłej liście wtyczek.

wp core verify-checksums
grep -rlE "header\s*\(\s*['\"]Location|HTTP_REFERER|wp_redirect\s*\(\s*['\"]https?://" --include=*.php wp-content/

Drugie polecenie zwróci też legalne wtyczki, bo przekierowania to normalna funkcja WordPressa. Szukasz kodu, który przekierowuje na stały, obcy adres w zależności od nagłówków.

Adres strony w bazie danych

W tabeli wp_options ustawienia siteurl i home określają adres strony. Jeśli atakujący je zmieni, przekierowuje każdego, łącznie z Tobą przy próbie logowania. W phpMyAdmin:

SELECT option_name, option_value FROM wp_options
WHERE option_name IN ('siteurl','home');

Jeśli wartości są obce, popraw je w phpMyAdmin albo poleceniem wp option update home 'https://twojadomena.pl' i tak samo dla siteurl. Możesz je też tymczasowo wymusić w wp-config.php stałymi WP_HOME i WP_SITEURL.

Skrypty w treści i ustawieniach

Przekierowania w JavaScripcie często siedzą w bazie danych, dopisane do treści wpisów, widżetów albo pól motywu:

SELECT ID, post_title FROM wp_posts
WHERE post_content LIKE '%<script%' AND post_status = 'publish';

SELECT option_name FROM wp_options
WHERE option_value LIKE '%<script%' OR option_value LIKE '%fromCharCode%';

Obejrzyj każde trafienie. Kody Google Tag Managera, czatów i pikseli reklamowych są legalne. Szukasz skryptów ładowanych z nieznanych domen, długich ciągów znaków budowanych przez String.fromCharCode i odwołań do window.location.

Wtyczki i skrypty z obcych domen

Niektóre przekierowania pochodzą ze skryptu, który kiedyś był legalny: licznika, widżetu lub biblioteki ładowanej z cudzego serwera. Jeśli ten serwer zmieni właściciela albo zostanie przejęty, skrypt zaczyna przekierowywać na wszystkich stronach, które go używają. Usuń skrypty z domen, których nie potrafisz wyjaśnić, i zastąp je wersjami z oficjalnych źródeł.

DNS i rejestrator

Jeśli przekierowuje każdy adres w domenie, także taki, którego nie ma na serwerze, problem leży poza stroną. Sprawdź, na jaki adres IP wskazuje domena i czy zgadza się z adresem serwera w panelu hostingu:

dig +short twojadomena.pl A
dig +short www.twojadomena.pl
whois twojadomena.pl

Zwróć uwagę na datę wygaśnięcia domeny, na włączone przekierowanie (przekierowanie WWW lub „forwarding”) w panelu rejestratora i na to, czy ktoś nie zmienił serwerów DNS. Jeśli domena jest zarejestrowana na byłego wykonawcę i nie masz do niej dostępu, zobacz artykuł Domena zarejestrowana na wykonawcę.

Naprawa krok po kroku

  1. Zrób kopię i zapisz dowody

    Pobierz pliki i bazę w obecnym stanie. Zapisz wynik polecenia curl z przekierowaniem i adres docelowy. Przyda się do porównania po naprawie i przy prośbie o sprawdzenie w Google.

  2. Zmień hasła i wyloguj sesje

    Hasło do hostingu, FTP, bazy danych i kont administratorów. Nowe klucze WordPressa: wp config shuffle-salts. Usuń konta administratorów, których nie znasz.

  3. Usuń kod przekierowania

    Popraw .htaccess, przywróć oryginalny index.php, usuń skrypty z bazy, popraw siteurl i home. Lepiej niż czyścić pojedyncze pliki jest podmienić rdzeń, wtyczki i motyw na świeże kopie, tak jak opisuję w poradniku Wirus na stronie WordPress.

  4. Znajdź mechanizm, który odtwarza przekierowanie

    Jeśli po poprawce przekierowanie wraca, coś je przywraca. Szukaj plików PHP w wp-content/uploads, nieznanych zadań w crontabie hostingu i zaplanowanych zadań WordPressa:

    find wp-content/uploads -type f -name "*.php"
    crontab -l
    wp cron event list --fields=hook,next_run_relative
  5. Zamknij lukę

    Zaktualizuj WordPressa, wtyczki i motywy, usuń nieużywane i porzucone dodatki. Bez tego kroku przekierowanie wróci, bo automaty znajdą tę samą dziurę.

  6. Sprawdź ponownie i zgłoś do Google

    Powtórz testy z okna prywatnego, telefonu i curl. Wyczyść pamięć podręczną wtyczki cache i CDN, bo mogą wciąż serwować stare, zainfekowane strony. Jeśli Google oznaczył stronę, poproś o sprawdzenie w Search Console. Szczegóły w artykule Strona zawiera szkodliwe programy.

Typowy scenariusz

Gabinet usługowy dostaje od klientek wiadomości, że strona na telefonie „otwiera loterię”. Właścicielka sprawdza na swoim komputerze i nic nie widzi. Test curl z nagłówkami telefonu nie pokazuje przekierowania, więc źródłem jest JavaScript. W tabeli wp_options w ustawieniach motywu, w polu na własny kod w stopce, siedzi skrypt ładowany z obcej domeny. Działa tylko raz dla danego urządzenia. Po jego usunięciu, aktualizacji motywu i zmianie haseł przekierowanie znika.

Niewinne przyczyny, które wyglądają podobnie

Nie każde przekierowanie to włamanie. Zanim zaczniesz czyścić stronę, wyklucz te przyczyny:

ObjawPrawdopodobna przyczynaCo zrobić
Przekierowuje na stary adres strony lub adres tymczasowyŹle ustawione siteurl i home po przeprowadzcePopraw adres w bazie lub w wp-config.php
Przeglądarka pokazuje błąd o zbyt wielu przekierowaniachPętla HTTPS: wymuszenie HTTPS w .htaccess, we wtyczce i w CDN narazZostaw jedno miejsce wymuszania HTTPS, ustaw adres strony na https://
Przekierowuje z www na wersję bez www lub odwrotnieNormalna konfiguracjaNic, jeśli kończy się na Twojej domenie
Wyskakuje reklama lub nowa karta z ofertąWtyczka lub sieć reklamowa z agresywnymi formatamiWyłącz wtyczkę reklam i sprawdź, czy problem znika
Przekierowuje tylko jedną podstronęReguła we wtyczce do przekierowań, wpisana kiedyś celowoSprawdź listę przekierowań we wtyczce
Prosta różnica

Niewinne przekierowania kończą się na Twojej domenie i działają tak samo dla każdego. Złośliwe prowadzą na obcą domenę i zwykle tylko dla części odwiedzających.

Kiedy nie robić tego samemu

Jeśli znalazłeś jedną regułę w .htaccess i po jej usunięciu przekierowanie nie wraca przez kilka dni, prawdopodobnie poradziłeś sobie sam. Oddaj sprawę specjaliście, gdy:

  • przekierowanie wraca po każdej poprawce,
  • nie potrafisz go wywołać, a klienci wciąż je zgłaszają,
  • to sklep, a przekierowanie dotyka płatności lub koszyka,
  • problem dotyczy domeny lub DNS i nie masz dostępu do rejestratora.

Koszty opisuję w artykule Ile kosztuje usunięcie wirusa ze strony.

Klienci lądują na kasynie, a Ty nie wiesz dlaczego?

Wywołuję przekierowanie, znajduję jego źródło i mechanizm, który je odtwarza, a potem zamykam lukę. Odwirusowanie kosztuje 499 zł netto, zgłoszenia przyjmuję 24/7, a po czyszczeniu daję 30 dni gwarancji czystości.

Najczęstsze pytania

Dlaczego przekierowanie widzą klienci, a ja nie?

Złośliwy kod zwykle pomija zalogowanych administratorów, osoby, które już raz zostały przekierowane, i wejścia bez odnośnika z wyszukiwarki. Ty wchodzisz na stronę z zakładki, będąc zalogowanym, więc widzisz normalną stronę. Sprawdź ją w oknie prywatnym, na telefonie przez dane komórkowe i wchodząc z wyników Google.

Czy przekierowanie może być winą hostingu albo domeny?

Tak, choć rzadziej niż infekcja strony. Jeśli przekierowuje cała domena, także adresy, których nie ma na serwerze, sprawdź rekordy DNS i to, czy domena nie wygasła. Wygasła lub przejęta domena może kierować na zupełnie inny serwer, a pliki Twojej strony są wtedy nietknięte.

Czy wystarczy poprawić plik .htaccess?

Rzadko. Przekierowanie w .htaccess jest często odtwarzane przez osobny plik PHP albo zadanie cron. Jeśli po poprawce przekierowanie wraca po kilku minutach lub godzinach, szukaj mechanizmu, który je przywraca, i luki, przez którą został wgrany.

Czy przekierowanie na kasyno szkodzi pozycjom w Google?

Tak. Google może oznaczyć stronę jako niebezpieczną, pokazać ostrzeżenie w wynikach albo zindeksować spamowe adresy. Im dłużej przekierowanie działa, tym dłużej trwa powrót do normy. Po wyczyszczeniu sprawdź raport „Problemy dotyczące bezpieczeństwa” w Search Console.

Grzegorz Wojterzak naprawia strony internetowe po awariach i włamaniach: WordPress, WooCommerce, PHP i Node.js. Od ponad dekady pracuje przy stronach i sklepach internetowych polskich firm.