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.