Cum pot evita tratarea erorilor 404 în WordPress și redirectarea acestora către 404.html pentru fișiere statice?

1 aug. 2011, 16:09:04
Vizualizări: 31.4K
Voturi: 19

Cum pot evita tratarea erorilor 404 în WordPress și redirecta toate erorile 404 pentru fișiere statice către 404.html?

Am citit și se pare că nu este posibil când se folosesc permalink-uri?

Obiectivul este de a reduce încărcarea serverului pentru erorile 404 prin evitarea încărcării PHP.

0
Toate răspunsurile la întrebare 7
1
10

.htaccess să omită gestionarea erorilor 404 în WordPress pentru fișiere statice.

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

Notă: Aceste reguli au fost generate de plugin-ul W3 Total Cache*

Nginx să omită gestionarea erorilor 404 în WordPress pentru fișiere statice.

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 aug. 2011 21:13:36
Comentarii

Super! Găsește mai multe extensii de fișiere 404 din jurnalele tale cu: sed -rn '/" 404 /s/^.*\.([a-z]+) HTTP.*$/\1/igp' log/access_log | sort | uniq

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

Poate o soluție simplă. Folosește tag-ul condițional is_404() și creează o redirecționare către fișierul tău static; include codul în fișierul header.php sau index.php al temei.

Iată un exemplu.

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

Link-uri

1 aug. 2011 20:24:33
Comentarii

decizia este încă luată în PHP aici și nu la nivel de htaccess. Scopul este să sări peste încărcarea PHP cu totul pentru erorile 404.

freethinker freethinker
2 aug. 2011 08:19:34

@freethinker: corect, doar prin php; metoda prin htaccess este mai rapidă, dar poate nu atât de ușor de gestionat în WordPress

bueltge bueltge
2 aug. 2011 22:41:06

@kaiser ups, am actualizat întrebarea

freethinker freethinker
3 aug. 2011 02:44:29
0

Pentru a completa ce a spus Chris_O... aș recomanda să instalezi W3 Total Cache și să folosești setările din acel plugin pentru a nu stoca în cache fișierele statice. Pluginul în sine este foarte util și obligatoriu pentru a accelera site-ul, mai ales cu ultima actualizare.

De asemenea, îți recomand să arunci o privire la Crearea unei pagini de eroare 404 de la WordPress pentru a vedea cum să gestionezi erorile 404 pentru fișiere statice, 403 (interzis), etc. Este o lectură utilă.

2 sept. 2011 14:14:26
0

Nu sunt sigur că acest lucru este posibil. Dacă te uiți la codul htaccess pe care WordPress îl creează atunci când activezi permalink-urile, acesta spune practic: "Dacă fișierul/directorul nu poate fi găsit, trimite-l la index.php." Aceasta include toate cererile efective de 404. În afară de a crea o listă cu fiecare resursă publică generată dinamic pe care WordPress o cunoaște și de a o insera direct în .htaccess, va trebui să încarci php pentru a gestiona erorile 404.

1 aug. 2011 20:37:46
0

Mi-a plăcut ideea lui Chris_O, dar am făcut propria mea versiune, care este mai sigură.

Ceea ce am făcut a fost să adaug foldere la excepții, astfel încât dacă cererile încep cu acele linii - nu poate fi un permalink valid. Majoritatea cererilor vin de la roboți care încearcă să verifice conținutul acestor foldere pentru exploatări. Acestea vor fi filtrate eficient, iar dacă este necesar, puteți afișa o mică pagină statică 404.

Celelalte cereri vor fi în continuare gestionate de WordPress, iar dacă cineva introduce o adresă greșită, va afișa un mesaj prietenos de „negăsit” în cadrul șablonului vostru. Soluția lui Chris_O va funcționa doar pentru cererile care arată ca extensii de fișiere, altfel vor fi și ele gestionate de WordPress.

Pentru a fi și mai sigur, puteți prelua fișierul vostru de acces brut și căuta erorile 404. Dacă observați multe cereri care încep cu anumite linii, le puteți include și pe acestea în acest filtru:

#adaugarea propriului 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>
13 iun. 2016 03:01:05
0

Am instalat mai multe CMS-uri pe site-ul meu, așa că folosesc ceva de genul acesta pentru a utiliza aceeași pagină de eroare 404 pentru toate CMS-urile. Folosesc această configurație pentru Nginx+FastCgi și funcționează corect:

server {
    ...
    error_page 404 /404.html; #activează pagina personalizată de eroare 404
    location ~ /\.ht {
        deny all; #dezactivează accesul la fișierele 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; #dezactivează interceptarea erorilor 404 de către PHP
    }
    location /wordpress/ {
        try_files $uri $uri/ /wordpress/index.php?$args;
    }
}

Folosesc această configurație împreună cu aceasta în php.ini:

cgi.fix_pathinfo = 1 

WordPress este instalat astfel http://example.com/wordpress/. Fișierul 404.html este localizat în rădăcina http://example.com/.

P.S. Nu uitați că serviciile PHP și Nginx trebuie repornite după modificarea fișierelor php.ini sau nginx.conf pentru ca modificările să intre în vigoare.

10 apr. 2018 19:45:31
2
-3

Există 3 metode de a face acest lucru

  1. Prin modificarea codului din fișierul 404.php.
  2. Prin utilizarea plugin-urilor WordPress.
  3. Prin editarea fișierului .htaccess.

Tutorial complet - (link mort și redirecționat către spam)

5 aug. 2012 13:26:12
Comentarii

Salut Mazhar, ai putea să postezi un răspuns complet, în loc doar un link către site-ul tău. Dacă linkul acela nu mai funcționează, acest răspuns va fi practic inutil! Mulțumesc!

Stephen Harris Stephen Harris
27 sept. 2012 12:35:37

această pagină returnează eroarea 404. Ironic. Sau încerci să spui ceva?

Michiel van der Blonk Michiel van der Blonk
16 sept. 2015 05:49:57