¿Cómo puedo omitir el manejo 404 de wordpress y redirigir todos los errores 404 para archivos estáticos a 404.html?

15

¿Cómo puedo omitir el manejo 404 de wordpress y redirigir todos los errores 404 para archivos estáticos a 404.html?

¿Leí y parece que no es posible cuando se utilizan los enlaces permanentes?

El objetivo es reducir la carga del servidor para errores 404 al no cargar php.

    
pregunta freethinker 01.08.2011 - 15:09

7 respuestas

8

.htaccess omite el manejo de errores de WordPress 404 para archivos estáticos .

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

Nota: Estas reglas fueron generadas por el complemento W3 Total Cache *

Nginx omite el manejo de WordPress 404 para archivos estáticos.

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;
}
    
respondido por el Chris_O 01.08.2011 - 20:13
1

Para ampliar lo que dijo Chris_O .... Instalaría W3 Total Cache y utilizaría la configuración de ese complemento para no almacenar en caché archivos estáticos. El complemento en sí mismo es muy útil y una necesidad para acelerar su sitio, especialmente con la última actualización.

También te recomiendo que eches un vistazo a Creando una Página de Error 404 de Wordpress para ver cómo manejar 404 para archivos estáticos, 403 (prohibido), etc. Es una buena lectura.

    
respondido por el Matthew Xerri 02.09.2011 - 13:14
1

Tal vez una solución simple. Use la etiqueta condicional is_404() y cree una redirección a su archivo estático; incluya el código en el archivo header.php o index.php del tema.

Aquí un ejemplo.

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

Enlaces

respondido por el bueltge 01.08.2011 - 19:24
0

No estoy seguro de que esto sea posible. Si observa el código htaccess que crea WordPress cuando habilita los enlaces permanentes, básicamente dice: "Si no puede encontrar el archivo / directorio, envíelo a index.php". Esto incluye todas las solicitudes reales 404. Además de crear una lista de todos los recursos públicos generados dinámicamente que WordPress conoce e insertarlo directamente en .htaccess, deberá cargar PHP para manejar los 404's.

    
respondido por el mfields 01.08.2011 - 19:37
0

Me gustó la idea de Chris_O , pero hice mi propia versión, que es más segura.

Entonces, lo que hice, solo agregué carpetas a excepción, así que si sus solicitudes comienzan desde esas líneas, definitivamente no es un enlace permanente válido. La mayoría de las solicitudes provienen de bots que intentan verificar el contenido de esas carpetas para detectar vulnerabilidades. Se filtrarán de manera efectiva y, si es necesario, puede mostrar una pequeña página 404 estática.

Otras solicitudes aún serán manejadas por WordPress, y si alguien ingresa una dirección incorrecta, mostrará un mensaje fácil de encontrar dentro de su plantilla. La solución de Chris_O solo funcionará para solicitudes que parezcan extensiones de archivo, de lo contrario, también serán manejadas por wordpress.

Para hacerlo aún más confiable, puede recuperar su archivo de acceso en bruto y buscar errores 404. Si observa muchas solicitudes que comienzan con líneas particulares, también puede incluirlas en este filtro:

#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>
    
respondido por el Anonymous 13.06.2016 - 02:01
0

Tengo varios CMS instalados en mi sitio, así que uso algo como esto para usar la misma página de error 404 para todos los CMS. Utilizo este conf para Nginx + FastCgi y está funcionando 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;
    }
}

Uso esta configuración junto con esto en php.ini:

cgi.fix_pathinfo = 1 

wordpress se instala de esta manera enlace . el 404.html se encuentra en la raíz del enlace .

P.S. No olvide que los servicios PHP y Nginx deben reiniciarse después de realizar cambios en los archivos php.ini o nginx.conf para que los cambios surtan efecto.

    
respondido por el eliz82 10.04.2018 - 18:45
-3

Hay 3 formas de hacer esto

  1. Al cambiar tu código 404.php.
  2. Mediante el uso de complementos de WordPress.
  3. Al editar tu archivo .htaccess.

Tutorial completo - (enlace muerto y redirigido a spam)

    
respondido por el Mazhar 05.08.2012 - 12:26

Lea otras preguntas en las etiquetas