Awarie
Błąd 403 Forbidden — dlaczego serwer odmawia dostępu
403 nie znaczy „nie ma”, znaczy „nie wpuszczę”. Serwer wie, o co prosisz, i celowo odmawia. Pokazujemy, kto zwykle stoi za tą decyzją.
403 Forbidden. Po polsku czasem „Brak dostępu” albo „Odmowa dostępu”.
Warto od razu zrozumieć różnicę między tym błędem a innymi, bo ona kieruje całą diagnozą. 404 oznacza „nie mam czegoś takiego”. 500 oznacza „miałem, ale się wywaliłem”. 403 znaczy: mam to, wiem czego chcesz i celowo Cię nie wpuszczę.
Ktoś więc podjął decyzję o zablokowaniu. Pytanie tylko kto: serwer, wtyczka bezpieczeństwa, uprawnienia plików czy plik .htaccess.
Ustal, co dokładnie jest zablokowane
Od tego zacznij, bo każdy wariant ma inną przyczynę.
Cała strona — najczęściej .htaccess albo blokada na poziomie serwera.
Tylko /wp-admin — wtyczka bezpieczeństwa, blokada adresu IP albo reguła ograniczająca dostęp do panelu.
Tylko przy logowaniu — zbyt wiele nieudanych prób i automatyczna blokada Twojego IP.
Tylko obrazki albo pliki w uploads — złe uprawnienia katalogów.
Tylko przy wgrywaniu plików albo zapisywaniu wpisu — reguła ModSecurity na serwerze uznała Twoje żądanie za atak.
Sprawdź .htaccess
Pierwszy podejrzany, bo najłatwiej go zepsuć — i to nie zawsze własnoręcznie. Wtyczki cache i wtyczki bezpieczeństwa dopisują tam swoje reguły.
Przez FTP zmień nazwę pliku .htaccess w katalogu głównym na .htaccess-old i odśwież stronę. Jeśli zadziałała, znasz sprawcę.
Wejdź wtedy w Ustawienia → Bezpośrednie odnośniki i kliknij „Zapisz zmiany” bez żadnych modyfikacji — WordPress wygeneruje czysty plik. Standardowa zawartość wygląda tak:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
Jeśli w starym pliku widziałeś dyrektywy deny from all, Require all denied albo długie listy adresów IP — to one blokowały. Sprawdź też, czy nie ma .htaccess w podkatalogach, na przykład w wp-admin albo wp-content/uploads. Tam też potrafi się zagnieździć.
Sprawdź uprawnienia plików
Serwer odmawia dostępu również wtedy, gdy uprawnienia są ustawione za restrykcyjnie. Prawidłowe wartości:
- katalogi — 755
- pliki — 644
wp-config.php— 640 lub 600 (można bezpieczniej niż resztę)
Jeśli gdzieś widzisz 777, zmień to natychmiast. To nie tylko powód błędu, ale otwarte zaproszenie — na wielu serwerach taki katalog pozwala wykonać wgrany plik PHP.
W menedżerze plików w panelu hostingu zwykle da się ustawić uprawnienia rekurencyjnie, osobno dla katalogów i osobno dla plików. Nie ustawiaj 755 na plikach ani 644 na katalogach, bo dostaniesz kolejne błędy.
Wyłącz wtyczki bezpieczeństwa
Wtyczki typu Wordfence czy Solid Security istnieją właśnie po to, żeby blokować. Czasem blokują Ciebie.
Typowy scenariusz: kilka razy pomyliłeś hasło, wtyczka uznała to za atak i wpisała Twój adres IP na czarną listę. Jeśli masz dynamiczne IP od operatora, możesz też odziedziczyć blokadę po kimś innym.
Bez dostępu do panelu wyłączasz je przez FTP — w wp-content/plugins zmień nazwę katalogu wtyczki, dodając na końcu -off. Nie wiesz której? Zmień nazwę całego katalogu plugins na plugins-off.
Po odzyskaniu dostępu wejdź w ustawienia wtyczki i zdejmij blokadę ze swojego adresu, a przy okazji dodaj go do listy wykluczeń.
Kiedy blokuje ModSecurity
To zapora aplikacyjna działająca na serwerze, przed WordPressem. Bardzo często włączona domyślnie na hostingach współdzielonych.
Objaw jest charakterystyczny: 403 pojawia się przy konkretnej akcji, a nie przy wchodzeniu na stronę. Zapisujesz wpis z fragmentem kodu — 403. Wgrywasz plik o określonej nazwie — 403. Wysyłasz formularz z dłuższym tekstem — 403.
Tego nie naprawisz z poziomu WordPressa. Trzeba napisać do hostingu, podając dokładny czas zdarzenia i adres URL. Na tej podstawie znajdą w logu regułę, która zadziałała, i mogą ją wyłączyć dla Twojego konta. Bez tych danych nie mają czego szukać.
Rzadsze przypadki warte sprawdzenia
Brak pliku index.php w katalogu głównym, przy wyłączonym listowaniu katalogów. Serwer nie ma czego pokazać i odmawia.
Blokada geograficzna albo lista dozwolonych IP ustawiona w panelu hostingu — czasem zostaje po kimś, kto konfigurował serwer wcześniej.
Cloudflare albo inny proxy z regułą WAF, która blokuje ruch przed dotarciem do serwera. Wtedy w logach hostingu nie znajdziesz nic, bo żądanie tam nie doszło.
Wygasły certyfikat lub przekierowania ustawione w kilku miejscach naraz — potrafi objawić się jako 403 zamiast pętli przekierowań.
Ile to zajmuje
Sprawdzenie .htaccess i uprawnień to kwadrans. Wyłączanie wtyczek metodą pojedynczą — do pół godziny. Sprawa z ModSecurity zależy od czasu reakcji hostingu, bo tu nie da się nic zrobić samemu.
Warto zlecić, gdy nie masz dostępu do FTP ani do panelu hostingu, gdy 403 pojawia się losowo (to najtrudniejszy wariant, bo trzeba czytać logi), albo gdy blokada dotknęła sklepu i klienci nie mogą dokończyć zamówienia.
Jeśli oprócz 403 widzisz też inne dziwne objawy — obce przekierowania, nieznane konta w panelu — sprawdź najpierw, czy strona nie została przejęta. Atakujący czasem sami dopisują reguły blokujące, żeby utrudnić właścicielowi dostęp.
Zablokowany na własnym serwerze? Odblokujemy to — diagnoza bezpłatna, odpowiedź w ciągu dwóch godzin. Sprawdzamy .htaccess, uprawnienia, wtyczki i logi serwera, więc nie zgadujemy. Rozliczenie godzinowe od 120 zł netto, płatność po wykonaniu.