web-dev-qa-db-de.com

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

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.

16
freethinker

.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;
}
8
Chris_O

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.php oder index.php des Themas ein.

Hier ein Beispiel.

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

Links

1
bueltge

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 Site zu beschleunigen, insbesondere mit dem neuesten Update.

Außerdem empfehle ich Ihnen, in Erstellen einer Fehler-404-Seite von Wordpress nachzusehen, wie Sie mit 404 für statische Dateien, 403 (verboten) usw. umgehen.

1
Matthew Xerri

Ich bin mir nicht sicher, ob das möglich ist. Wenn Sie sich den htaccess-Code ansehen, den WordPress beim Aktivieren von Permalinks erstellt, heißt es im Grunde: "Wenn die Datei/das Verzeichnis nicht gefunden werden kann, senden Sie sie 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.

0
mfields

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

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

0
eliz82

Ich mochte die Idee von Chris_O , 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>
0
Anonymous