Comment ignorer la gestion 404 de wordpress et rediriger toutes les erreurs 404 pour les fichiers statiques vers 404.html?

17

Comment ignorer la gestion 404 de wordpress et rediriger toutes les erreurs 404 pour les fichiers statiques vers 404.html?

J'ai lu et il ne semble pas possible d'utiliser des permaliens?

L'objectif est de réduire la charge du serveur pour les erreurs 404 en ne chargeant pas php.

libre penseur
la source

Réponses:

8

.htaccess ignore la gestion des erreurs WordPress 404 pour les fichiers statiques .

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

Remarque: Ces règles ont été générées par le plug-in W3 Total Cache *

Nginx ignore la gestion de WordPress 404 pour les fichiers statiques.

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
la source
1

Pour étendre ce que Chris_O a dit ... J'installerais W3 Total Cache et utiliserais les paramètres de ce plugin pour ne pas mettre en cache les fichiers statiques. Le plugin en lui-même est très utile et indispensable pour accélérer votre site, notamment avec la dernière mise à jour.

Je vous recommande également de consulter Création d'une page d' erreur 404 à partir de Wordpress pour voir comment gérer 404 pour les fichiers statiques, 403 (interdit), etc. C'est une bonne lecture.

Matthew Xerri
la source
1

Peut-être une solution simple. Utilisez la balise conditionnelle is_404()et créez une redirection vers votre fichier statique; inclure le code dans le fichier header.phpou index.phpdu thème.

Voici un exemple.

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

Liens

bueltge
la source
2
la prise de décision se fait toujours en PHP ici et non au niveau htaccess. Le but est de sauter complètement le chargement de PHP pour les erreurs 404.
Libre
2
@freethinker: à droite, uniquement via php; le chemin via htaccess est plus rapide, mais peut-être pas si facile à gérer dans WordPress
bueltge
@kaiser oops, a mis à jour la question
libre
0

Je ne suis pas sûr que ce soit possible. Si vous regardez le code htaccess que WordPress crée lorsque vous activez les permaliens, il dit essentiellement: "Si le fichier / répertoire est introuvable, envoyez-le à index.php." Cela comprend toutes les 404 demandes réelles. En dehors de la création d'une liste de toutes les ressources publiques générées dynamiquement que WordPress connaît et de l'insertion directe dans .htaccess, vous devrez charger php pour gérer les 404.

mfields
la source
0

J'ai aimé l'idée de Chris_O , mais j'ai fait ma propre version, qui est plus sûre.

Donc, ce que j'ai fait, j'ai juste ajouté des dossiers à l'exception, donc si vos demandes commencent à partir de ces lignes - ce n'est certainement pas un permalien valide. La majorité des demandes proviennent de bots qui essaient de vérifier le contenu de ces dossiers pour détecter les exploits. Ils seront efficacement filtrés, et si nécessaire, vous pouvez afficher une petite page 404 statique.

Les autres demandes seront toujours traitées par wordpress, et si quelqu'un entre une mauvaise adresse, il affichera un message convivial introuvable dans votre modèle. La solution de Chris_O ne fonctionnera que pour les requêtes qui ressemblent à des extensions de fichier, sinon elles seront également gérées par wordpress.

Pour le rendre encore plus fiable, vous pouvez récupérer votre fichier d'accès brut et rechercher les erreurs 404. Si vous remarquez de nombreuses demandes commençant par des lignes particulières, vous pouvez également les inclure dans ce filtre:

#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>
Anonyme
la source
0

J'ai plusieurs CMS installés sur mon site, donc j'utilise quelque chose comme ça pour utiliser la même page d'erreur 404 pour tous les CMS. J'utilise cette conf pour Nginx + FastCgi et ça marche bien:

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

J'utilise cette configuration avec ceci dans php.ini:

cgi.fix_pathinfo = 1 

wordpress est installé comme ceci http://example.com/wordpress/ . le 404.html est situé à la racine du http://example.com/ .

PS N'oubliez pas que les services PHP et Nginx doivent être redémarrés après avoir apporté des modifications aux fichiers php.ini ou nginx.conf pour que les modifications prennent effet.

eliz82
la source
-3

Il y a 3 façons de procéder

  1. En changeant votre code 404.php.
  2. En utilisant des plugins wordpress.
  3. En éditant votre fichier .htaccess.

Tutoriel complet - (lien mort et redirigé vers le spam)

Mazhar
la source
Salut Mazhar, pourriez-vous publier une réponse complète, plutôt qu'un simple lien vers votre site. Si ce lien meurt, cette réponse sera à peu près inutile! À votre santé!
Stephen Harris
cette page donne un 404. Ironique. Ou essayez-vous de dire quelque chose?
Michiel van der Blonk