Come posso saltare la gestione 404 di wordpress e reindirizzare tutti gli errori 404 per i file statici su 404.html?


17

Come posso saltare la gestione 404 di wordpress e reindirizzare tutti gli errori 404 per i file statici su 404.html?

Ho letto e sembra che non sia possibile quando si usano i permalink?

L'obiettivo è ridurre il carico del server per errori 404 non caricando php.

Risposte:


8

.htaccess salta la gestione degli errori di WordPress 404 per i file statici .

<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: queste regole sono state generate dal plug-in W3 Total Cache *

Nginx salta la gestione di WordPress 404 per i file statici.

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

1

Per estendere ciò che ha detto Chris_O .... Vorrei installare W3 Total Cache e utilizzare le impostazioni di quel plugin per non memorizzare nella cache i file statici. Il plugin in sé è molto utile e un must per velocizzare il tuo sito, specialmente con l'ultimo aggiornamento.

Inoltre ti consiglio di dare un'occhiata a Creazione di una pagina di errore 404 da Wordpress per vedere come gestire 404 per file statici, 403 (vietato), ecc. È una buona lettura.


1

Forse una soluzione semplice. Utilizzare il tag condizionale is_404()e creare un reindirizzamento al file statico; includere il codice nel file header.phpo index.phpdel tema.

Ecco un esempio

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

link


2
il processo decisionale è ancora fatto in PHP qui e non a livello di accessibilità. L'obiettivo è saltare del tutto il caricamento di PHP per 404 errori.
pensatore

2
@freethinker: giusto, solo via php; il modo tramite htaccess è più veloce, ma forse non così facile da maneggiare in WordPress
bueltge

@kaiser oops, aggiornata la domanda
Freethinker,

0

Non sono sicuro che questo sia possibile. Se guardi il codice htaccess che WordPress crea quando abiliti i permalink, in pratica dice: "Se non è possibile trovare il file / directory, invialo a index.php." Ciò include tutte le effettive 404 richieste. Oltre a creare un elenco di ogni risorsa pubblica generata dinamicamente che WordPress conosce e inserirla direttamente in .htaccess, dovrai caricare php per gestire i 404.


0

Mi è piaciuta l'idea di Chris_O , ma ho realizzato la mia versione, che è più sicura.

Quindi, quello che ho fatto, ho appena aggiunto delle cartelle all'eccezione, quindi se le tue richieste partono da quelle righe, non è sicuramente un permalink valido. La maggior parte delle richieste proviene da bot che stanno provando a controllare gli exploit nel contenuto di tali cartelle. Saranno efficacemente filtrati e, se necessario, sarà possibile visualizzare alcune piccole pagine statiche 404.

Altre richieste verranno comunque gestite da wordpress e se qualcuno inserisce un indirizzo errato visualizzerà un messaggio non trovato facile da usare all'interno del modello. La soluzione di Chris_O funzionerà solo per richieste che sembrano estensioni di file, altrimenti verranno gestite anche da wordpress.

Per renderlo ancora più affidabile, è possibile recuperare il file di accesso non elaborato e cercare 404 errori. Se noti molte richieste che iniziano con righe particolari, puoi anche includerle in questo 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>

0

Ho installato CMS multipli sul mio sito, quindi uso qualcosa del genere per utilizzare la stessa pagina di errore 404 per tutti i CMS. Uso questo conf per Nginx + FastCgi e funziona benissimo:

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 questa configurazione insieme a questa in php.ini:

cgi.fix_pathinfo = 1 

wordpress è installato in questo modo http://example.com/wordpress/ . 404.html si trova nella radice di http://example.com/ .

PS Non dimenticare che i servizi PHP e Nginx devono essere riavviati dopo aver apportato modifiche ai file php.ini o nginx.conf per rendere effettive le modifiche.


-3

Ci sono 3 modi per farlo

  1. Modificando il tuo codice 404.php.
  2. Utilizzando plugin wordpress.
  3. Modificando il tuo file .htaccess.

Tutorial completo - (link morto e reindirizzato allo spam)


Ciao Mazhar, potresti pubblicare una risposta completa, piuttosto che un semplice link al tuo sito. Se quel link muore, questa risposta sarà praticamente inutile! Saluti!
Stephen Harris,

questa pagina dà un 404. Ironico. O stai cercando di dire qualcosa?
Michiel van der Blonk,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.