.htaccess pomiń obsługę błędów WordPress 404 dla plików statycznych .
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(robots\.txt|sitemap\.xml(\.gz)?)
RewriteCond %{REQUEST_FILENAME} \.(css|js|html|htm|rtf|rtx|svg|svgz|txt|xsd|xsl|xml|asf|asx|wax|wmv|wmx|avi|bmp|class|divx|doc|docx|exe|gif|gz|gzip|ico|jpg|jpeg|jpe|mdb|mid|midi|mov|qt|mp3|m4a|mp4|m4v|mpeg|mpg|mpe|mpp|odb|odc|odf|odg|odp|ods|odt|ogg|pdf|png|pot|pps|ppt|pptx|ra|ram|swf|tar|tif|tiff|wav|wma|wri|xla|xls|xlsx|xlt|xlw|zip)$ [NC]
RewriteRule .* - [L]
</IfModule>
Uwaga: te reguły zostały wygenerowane przez wtyczkę W3 Total Cache *
Nginx pomija obsługę WordPress 404 dla plików statycznych.
if (-f $request_filename) {
break;
}
if (-d $request_filename) {
break;
}
if ($request_uri ~ "(robots\.txt|sitemap\.xml(\.gz)?)") {
break;
}
if ($request_uri ~* \.(css|js|html|htm|rtf|rtx|svg|svgz|txt|xsd|xsl|xml|asf|asx|wax|wmv|wmx|avi|bmp|class|divx|doc|docx|exe|gif|gz|gzip|ico|jpg|jpeg|jpe|mdb|mid|midi|mov|qt|mp3|m4a|mp4|m4v|mpeg|mpg|mpe|mpp|odb|odc|odf|odg|odp|ods|odt|ogg|pdf|png|pot|pps|ppt|pptx|ra|ram|swf|tar|tif|tiff|wav|wma|wri|xla|xls|xlsx|xlt|xlw|zip)$) {
return 404;
}
Nie jestem pewien, czy to jest możliwe. Jeśli spojrzysz na kod htaccess, który WordPress tworzy po włączeniu permalinków, w zasadzie mówi: „Jeśli nie można znaleźć pliku / katalogu, wyślij go do index.php”. Dotyczy to wszystkich rzeczywistych 404 wniosków. Poza utworzeniem listy każdego dynamicznie generowanego zasobu publicznego, o którym wie WordPress, i bezpośrednim wstawieniem tego do .htaccess, musisz załadować php, aby obsłużyć 404.
źródło
Podobał mi się pomysł Chris_O , ale stworzyłem własną wersję, która jest bezpieczniejsza.
Więc co zrobiłem, właśnie dodałem foldery do wyjątku, więc jeśli twoje żądania zaczynają się od tych linii - to zdecydowanie nie jest prawidłowy bezpośredni link. Większość żądań pochodzi od botów, które próbują sprawdzić zawartość tych folderów pod kątem exploitów. Będą one skutecznie filtrowane, aw razie potrzeby możesz wyświetlić małą statyczną stronę 404.
Inne żądania będą nadal obsługiwane przez wordpress, a jeśli ktoś wpisze niewłaściwy adres, wyświetli przyjazną dla użytkownika wiadomość nie znalezioną w szablonie. Rozwiązanie Chris_O będzie działać tylko w przypadku żądań, które wyglądają jak rozszerzenia plików, w przeciwnym razie będą one obsługiwane przez wordpress.
Aby uczynić go jeszcze bardziej niezawodnym, możesz odzyskać plik dostępu surowego i wyszukać błędy 404. Jeśli zauważysz wiele żądań rozpoczynających się od konkretnych wierszy, możesz również dołączyć je do tego filtra:
źródło
Mam wiele CMSów zainstalowanych na mojej stronie, więc używam czegoś takiego, aby użyć tej samej strony błędu 404 dla wszystkich CMSów. Używam tego conf dla Nginx + FastCgi i działa dobrze:
Używam tej konfiguracji razem z tym w php.ini:
wordpress jest zainstalowany tak jak ten http://example.com/wordpress/ . plik 404.html znajduje się w katalogu głównym http://example.com/ .
PS Nie zapominaj, że usługi PHP i Nginx muszą zostać zrestartowane po wprowadzeniu zmian w plikach php.ini lub nginx.conf, aby zmiany odniosły skutek.
źródło
Można to zrobić na 3 sposoby
Kompletny samouczek - (martwy link i przekierowanie do spamu)
źródło