Wie überspringe ich die 404-Behandlung von WordPress und leite alle 404-Fehler für statische Dateien nach 404.html um?

17

Wie überspringe ich die 404-Behandlung von WordPress und leite alle 404-Fehler für statische Dateien nach 404.html um?

Ich habe gelesen und es scheint nicht möglich zu sein, wenn ich Permalinks benutze.

Das Ziel ist es, die Serverlast für 404-Fehler zu reduzieren, indem PHP nicht geladen wird.

Freidenker
quelle

Antworten:

8

.htaccess überspringen WordPress 404-Fehlerbehandlung für statische Dateien .

<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>

Hinweis: Diese Regeln wurden vom W3 Total Cache-Plugin generiert *

Nginx überspringt die WordPress 404-Behandlung für statische Dateien.

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;
}
Chris_O
quelle
1

Um zu erweitern, was Chris_O sagte ... Ich würde W3 Total Cache installieren und die Einstellungen dieses Plugins verwenden, um keine statischen Dateien zwischenzuspeichern. Das Plugin selbst ist sehr nützlich und ein Muss, um Ihre Website zu beschleunigen, insbesondere mit dem neuesten Update.

Außerdem empfehle ich, dass Sie einen Blick auf Erstellen einer Fehler-404-Seite in Wordpress werfen, um zu sehen, wie Sie 404 für statische Dateien, 403 (verboten) usw. handhaben. Es ist eine gute Lektüre.

Matthew Xerri
quelle
1

Vielleicht eine einfache Lösung. Verwenden Sie das bedingte Tag is_404()und erstellen Sie eine Umleitung zu Ihrer statischen Datei. Fügen Sie den Code in die Datei header.phpoder index.phpdas Thema ein.

Hier ein Beispiel.

   if ( is_404() ) {
      wp_redirect( 'static.htm' );
      exit;
   }

Links

bueltge
quelle
2
Die Entscheidungsfindung erfolgt hier immer noch in PHP und nicht auf Zugriffsebene. Ziel ist es, das Laden von PHP insgesamt für 404-Fehler zu überspringen.
Freidenker
2
@freethinker: richtig, nur per php; der weg über htaccess ist schneller, aber vielleicht nicht so einfach in WordPress zu
handhaben
@kaiser oops, aktualisiert die Frage
freidenker
0

Ich bin mir nicht sicher, ob das möglich ist. Wenn Sie sich den htaccess-Code ansehen, den WordPress erstellt, wenn Sie Permalinks aktivieren, heißt es im Grunde: "Wenn die Datei / das Verzeichnis nicht gefunden werden kann, senden Sie es an index.php." Dies umfasst alle tatsächlichen 404-Anforderungen. Abgesehen davon, dass Sie eine Liste aller dynamisch generierten öffentlichen Ressourcen erstellen müssen, die WordPress kennt, und diese direkt in .htaccess einfügen, müssen Sie PHP laden, um die 404-Ressourcen zu verarbeiten.

Mfields
quelle
0

Die Idee von Chris_O hat mir gefallen , aber ich habe meine eigene Version erstellt, die sicherer ist.

Also, was ich getan habe, ich habe gerade Ordner zur Ausnahme hinzugefügt. Wenn Ihre Anforderungen also von diesen Zeilen ausgehen, ist dies definitiv kein gültiger Permalink. Die meisten Anfragen kommen von Bots, die versuchen, den Inhalt dieser Ordner auf Exploits zu überprüfen. Sie werden effektiv gefiltert und bei Bedarf können Sie eine kleine statische 404-Seite anzeigen.

Andere Anfragen werden weiterhin von WordPress bearbeitet. Wenn jemand eine falsche Adresse eingibt, wird eine benutzerfreundliche, nicht gefundene Nachricht in Ihrer Vorlage angezeigt. Die Lösung von Chris_O funktioniert nur für Anfragen, die wie Dateierweiterungen aussehen, ansonsten werden sie auch von WordPress bearbeitet.

Um es noch zuverlässiger zu machen, können Sie Ihre Rohzugriffsdatei abrufen und nach 404-Fehlern suchen. Wenn Sie feststellen, dass viele Anforderungen mit bestimmten Zeilen beginnen, können Sie sie auch in diesen Filter einschließen:

#adding your own handler
ErrorDocument 404 /404/index.html

<IfModule mod_rewrite.c>
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_URI} !^/(404|cgi-bin|wp-admin|wp-content|wp-includes)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
Anonym
quelle
0

Ich habe mehrere CMS auf meiner Site installiert, daher verwende ich so etwas, um dieselbe 404-Fehlerseite für alle CMS zu verwenden. Ich benutze dieses conf für Nginx + FastCgi und es funktioniert gut:

server {
    ...
    error_page 404 /404.html; #enable custom 404 error page
    location ~ /\.ht {
        deny all; #disable access to htaccess
    }
    location ~ [^/]\.php(/|$) {
        fastcgi_pass  127.0.0.1:9000;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_intercept_errors on; #disable PHP 404 error intercept
    }
    location /wordpress/ {
        try_files $uri $uri/ /wordpress/index.php?$args;
    }
}

Ich benutze diese Konfiguration zusammen mit dieser in der php.ini:

cgi.fix_pathinfo = 1 

wordpress wird wie folgt installiert: http://example.com/wordpress/ . Die 404.html befindet sich im Stammverzeichnis von http://example.com/ .

PS Vergessen Sie nicht, dass die PHP- und Nginx-Dienste neu gestartet werden müssen, nachdem Änderungen an den Dateien php.ini oder nginx.conf vorgenommen wurden, damit die Änderungen wirksam werden.

eliz82
quelle
-3

Es gibt drei Möglichkeiten, dies zu tun

  1. Indem du deinen 404.php Code änderst.
  2. Durch die Verwendung von WordPress-Plugins.
  3. Durch Bearbeiten Ihrer .htaccess-Datei.

Komplettes Tutorial - (Link tot und zu Spam weitergeleitet)

Mazhar
quelle
Hallo Mazhar, könntest du eine vollständige Antwort schreiben, anstatt nur einen Link zu deiner Seite. Wenn dieser Link abbricht, ist diese Antwort so ziemlich nutzlos! Prost!
Stephen Harris
Diese Seite gibt eine 404. Ironie. Oder willst du etwas sagen?
Michiel van der Blonk