Semantycznie poprawny kod odpowiedzi HTTP dla tej sytuacji to 403 Zabronione :
Serwer zrozumiał żądanie, ale odmawia jego spełnienia. Autoryzacja nie pomoże, a prośba NIE POWINNA zostać powtórzona. Jeśli metoda żądania nie była HEAD, a serwer chce podać do publicznej wiadomości, dlaczego żądanie nie zostało spełnione, POWINIEN opisać przyczynę odmowy w jednostce. Jeśli serwer nie chce udostępnić tych informacji klientowi, zamiast tego można użyć kodu stanu 404 (Nie znaleziono).
(Chociaż definicja odpowiedzi 403 mówi, że „autoryzacja nie pomoże”, IMO należy rozumieć jako odnoszące się konkretnie do uwierzytelniania HTTP Basic / Digest , dla którego zamiast tego należy użyć kodu stanu 401 Nieautoryzowany . Ponieważ nie używasz jedną z tych metod uwierzytelniania, 403 jest odpowiednim kodem stanu w twoim przypadku).
Jednak przy użyciu kodu 403 ujawnia stanu (lub przynajmniej zdecydowanie wskazuje) fakt, że nie jest strona z tego adresu URL, nawet jeśli serwer odmawia go dostarczyć. Ponieważ jest to coś, co możesz ukryć przed potencjalnymi intruzami, standard HTTP / 1.1 wyraźnie zezwala zamiast tego na zwrócenie kodu stanu 404 Nie znaleziono ( moje wyróżnienie):
Serwer nie znalazł nic pasującego do URI żądania. Nie podano żadnych wskazówek, czy stan jest tymczasowy czy trwały. Kod statusu 410 (Zniknął) POWINIEN być użyty, jeśli serwer wie, poprzez jakiś wewnętrznie konfigurowalny mechanizm, że stary zasób jest trwale niedostępny i nie ma adresu przekierowania.
Ten kod stanu jest powszechnie używany, gdy serwer nie chce dokładnie wyjaśnić, dlaczego żądanie zostało odrzucone, lub gdy żadna inna odpowiedź nie ma zastosowania.
Oczywiście, aby takie ukrywanie było w ogóle skuteczne, zwracana strona błędu 404 musi wyglądać identycznie jak zwracana w przypadku faktycznie nieistniejących stron. W przeciwnym razie oszukuje tylko najgłupszych i najbardziej przypadkowych napastników. (Jeśli Twoim celem jest po prostu utrzymanie stron poza indeksem Google, odpowiedź 403 również to zrobi).
Co z innymi możliwymi odpowiedziami sugerowanymi w twoim pytaniu i innymi odpowiedziami?
Jak zauważyłem wcześniej, nie sądzę, aby odpowiedź 401 była tutaj odpowiednia. To może działać w praktyce, o ile większość przeglądarek i wyszukiwarek będzie traktować każdą nieprawidłowy lub nierozpoznany 4 xx kod odpowiedzi seria jakby to było 404, ale wciąż nie jest ważne zgodnie z HTTP Spec, a tam nie ma praktycznego powodu, aby go preferują ponad 403 lub 404.
Jeśli chodzi o używanie przekierowania 301 (lub 302) na osobną stronę „błąd 404”, jest to okropna praktyka rozpowszechniana przez niechlujne samouczki mod_rewrite i nie ma absolutnie żadnych funkcji wykupujących w porównaniu do bezpośredniego zwracania odpowiedzi 404:
Jest to mylące dla odwiedzających, ponieważ adres URL, który próbowali odwiedzić, zostaje zastąpiony adresem URL strony błędu. Zatem widzą komunikat, że już osiągnął nieistniejącą stronę, ale nie łatwo widoczne wskazanie co strona starali się wizyty było, a więc nie można łatwo próbować żadnych strategii odzyskiwania jak mocowania żadnych oczywistych literówki w adresie URL, lub skopiuj i wklej go do Google lub Wayback Machine.
Może to mylić wyszukiwarki, szczególnie jeśli Twoja strona 404 jest niedozwolona w pliku robots.txt lub jeśli nieprawidłowo zwraca odpowiedź 200 OK zamiast prawdziwego kodu stanu 404 ( „miękki 404” ), potencjalnie powodując wyświetlenie strony 404 podczas wyszukiwania wyniki dla losowych wyszukiwanych haseł.
Powoduje to (niewielką ilość) dodatkowego obciążenia serwerów, wydłuża czas reakcji odwiedzających i potencjalnie spowalnia wyszukiwarki indeksujące Twoją witrynę, ponieważ każde żądanie nieistniejącej (lub ukrytej) strony wymaga teraz dodatkowej rundy HTTP wyjazd.
Nie przynosi to korzyści SEO, ponieważ i tak traci się „sok z linków” ze stron przekierowanych na stronę 404.
(Oczywiście, jedna sytuacja, gdzie zrobić chcesz użyć przekierowania 301 zamiast odpowiedzi 404 jest, gdy strona rzeczywiście został przeniesiony i można przekierować użytkownika do prawidłowej lokalizacji. Ale to nie jest przypadek omawiany tutaj).
Na koniec chciałbym powtórzyć zdanie wyrażone w wielu komentarzach tutaj, że zwykłe „ukrywanie” takich stron administracyjnych nie jest odpowiednim substytutem dla prawidłowego uwierzytelniania opartego na haśle . To powiedziawszy, jeśli masz już skonfigurowany bezpieczny system uwierzytelniania, ukrywanie stron może być przydatne jako dodatkowa warstwa, choć dość słaba, w podejściu do obrony .