Come evitare la gestione 404 di WordPress e reindirizzare tutti gli errori 404 dei file statici a 404.html?

1 ago 2011, 16:09:04
Visualizzazioni: 31.4K
Voti: 19

Come posso evitare la gestione 404 di WordPress e reindirizzare tutti gli errori 404 dei file statici a 404.html?

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

L'obiettivo è ridurre il carico del server per gli errori 404 evitando di caricare PHP.

0
Tutte le risposte alla domanda 7
1
10

.htaccess per saltare la gestione degli errori 404 di WordPress per 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 plugin W3 Total Cache*

Nginx per saltare la gestione degli errori 404 di WordPress per 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 ago 2011 21:13:36
Commenti

Ottimo! Trova altre estensioni di file che generano errori 404 dai tuoi log con: sed -rn '/" 404 /s/^.*\.([a-z]+) HTTP.*$/\1/igp' log/access_log | sort | uniq

Quinn Comendant Quinn Comendant
17 mag 2020 03:19:58
3

Forse una soluzione semplice. Usa il tag condizionale is_404() e crea un reindirizzamento al tuo file statico; includi il codice nel file header.php o index.php del tema.

Ecco un esempio.

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

Link

1 ago 2011 20:24:33
Commenti

la decisione viene ancora presa in PHP qui e non a livello di htaccess. L'obiettivo è saltare del tutto il caricamento di PHP per gli errori 404.

freethinker freethinker
2 ago 2011 08:19:34

@freethinker: giusto, solo tramite php; la via tramite htaccess è più veloce, ma forse non così semplice da gestire in WordPress

bueltge bueltge
2 ago 2011 22:41:06

@kaiser ops, ho aggiornato la domanda

freethinker freethinker
3 ago 2011 02:44:29
0

Per ampliare quanto detto da Chris_O... consiglierei di installare W3 Total Cache e utilizzare le impostazioni di questo plugin per non memorizzare nella cache i file statici. Il plugin in sé è molto utile e indispensabile per velocizzare il tuo sito, soprattutto con l'ultimo aggiornamento.

Inoltre, ti consiglio di dare un'occhiata alla pagina Creazione di una Pagina di Errore 404 su WordPress per vedere come gestire gli errori 404 per i file statici, 403 (accesso negato), ecc. È una lettura interessante.

2 set 2011 14:14:26
0

Non sono sicuro che questo sia possibile. Se osservi il codice htaccess che WordPress genera quando abiliti i permalink, sostanzialmente dice: "Se il file/directory non viene trovato, invialo a index.php". Questo include tutte le vere richieste 404. A meno di creare una lista di ogni risorsa pubblica generata dinamicamente che WordPress conosce e inserirla direttamente in .htaccess, dovrai caricare php per gestire gli errori 404.

1 ago 2011 20:37:46
0

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

Quello che ho fatto è stato aggiungere cartelle alle eccezioni, quindi se la tua richiesta inizia con quelle righe - non è sicuramente un permalink valido. La maggior parte delle richieste proviene da bot che cercano di verificare il contenuto di quelle cartelle alla ricerca di exploit. Verranno efficacemente filtrate e, se necessario, puoi mostrare una piccola pagina statica 404.

Le altre richieste saranno comunque gestite da WordPress, e se qualcuno inserisce un indirizzo sbagliato verrà visualizzato un messaggio di "non trovato" user-friendly all'interno del tuo template. La soluzione di Chris_O funziona solo per le richieste che sembrano estensioni di file, altrimenti verranno comunque gestite da WordPress.

Per renderlo ancora più affidabile, puoi recuperare il tuo file di accesso grezzo e cercare gli errori 404. Se noti molte richieste che iniziano con righe particolari, puoi includerle anche in questo filtro:

#aggiunta del tuo gestore personalizzato
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>
13 giu 2016 03:01:05
0

Ho più CMS installati sul mio sito, quindi utilizzo qualcosa di simile per usare la stessa pagina di errore 404 per tutti i CMS. Uso questa configurazione per Nginx+FastCgi e funziona correttamente:

server {
    ...
    error_page 404 /404.html; #abilita la pagina personalizzata per l'errore 404
    location ~ /\.ht {
        deny all; #disabilita l'accesso agli 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; #disabilita l'intercettazione degli errori 404 di PHP
    }
    location /wordpress/ {
        try_files $uri $uri/ /wordpress/index.php?$args;
    }
}

Utilizzo questa configurazione insieme a questa in php.ini:

cgi.fix_pathinfo = 1 

WordPress è installato in questo modo http://example.com/wordpress/. Il file 404.html si trova nella root di http://example.com/.

P.S. Non dimenticare che i servizi PHP e Nginx devono essere riavviati dopo aver apportato modifiche ai file php.ini o nginx.conf affinché le modifiche abbiano effetto.

10 apr 2018 19:45:31
2
-3

Ci sono 3 modi per farlo

  1. Modificando il codice del tuo file 404.php.
  2. Utilizzando plugin di WordPress.
  3. Modificando il tuo file .htaccess.

Tutorial completo - (link non funzionante e reindirizzato a spam)

5 ago 2012 13:26:12
Commenti

Ciao Mazhar, potresti pubblicare una risposta completa, invece di solo un link al tuo sito. Se quel link muore, questa risposta sarà praticamente inutile! Grazie!

Stephen Harris Stephen Harris
27 set 2012 12:35:37

questa pagina restituisce un errore 404. Ironico. O stai cercando di dire qualcosa?

Michiel van der Blonk Michiel van der Blonk
16 set 2015 05:49:57