Bagaimana saya melewatkan penanganan 404 wordpress dan mengalihkan semua 404 kesalahan untuk file statis ke 404.html?

17

Bagaimana saya melewatkan penanganan 404 wordpress dan mengalihkan semua 404 kesalahan untuk file statis ke 404.html?

Saya membaca dan sepertinya tidak mungkin ketika menggunakan permalinks?

Tujuannya adalah untuk mengurangi beban server untuk 404 kesalahan dengan tidak memuat php.

pemikir bebas
sumber

Jawaban:

8

.htaccess lewati penanganan kesalahan WordPress 404 untuk file statis .

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

Catatan: Aturan-aturan ini dihasilkan oleh plugin W3 Total Cache *

Nginx melewatkan WordPress 404 untuk menangani file statis.

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;
}
Chris_O
sumber
1

Untuk memperluas apa yang dikatakan Chris_O .... Saya akan menginstal W3 Total Cache dan menggunakan pengaturan dari plugin itu untuk tidak men-cache file statis. Plugin itu sendiri sangat berguna dan harus mempercepat situs Anda, terutama dengan pembaruan terbaru.

Juga saya sarankan Anda melihat Membuat Halaman 404 Kesalahan dari Wordpress untuk melihat bagaimana menangani 404 untuk file statis, 403 (dilarang), dll. Ini bacaan yang bagus.

Matthew Xerri
sumber
1

Mungkin solusi sederhana. Gunakan tag bersyarat is_404()dan buat pengalihan ke file statis Anda; termasuk kode dalam file header.phpatau index.phptema.

Berikut sebuah contoh.

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

Tautan

bueltge
sumber
2
pengambilan keputusan masih dilakukan dalam PHP di sini dan tidak pada level htaccess. Tujuannya adalah untuk melewatkan pemuatan PHP sama sekali untuk 404 kesalahan.
freethinker
2
@freethinker: benar, hanya melalui php; cara via htaccess lebih cepat, tapi mungkin penanganannya tidak begitu mudah di WordPress
bueltge
@kaiser oops, memperbarui pertanyaan
freethinker
0

Saya tidak yakin ini mungkin. Jika Anda melihat kode htaccess yang dibuat WordPress ketika Anda mengaktifkan permalink, pada dasarnya tertulis: "Jika file / direktori tidak dapat ditemukan, kirim ke index.php." Ini termasuk semua 404 permintaan aktual. Di luar membuat daftar setiap sumber daya publik yang dihasilkan secara dinamis yang diketahui oleh WordPress dan secara langsung memasukkan ini ke dalam .htaccess, Anda harus memuat php untuk menangani 404-an.

ladang
sumber
0

Saya menyukai gagasan Chris_O , tetapi saya membuat versi saya sendiri, yang lebih aman.

Jadi apa yang saya lakukan, saya hanya menambahkan folder ke pengecualian, jadi jika permintaan Anda mulai dari baris tersebut - itu jelas bukan permalink yang valid. Sebagian besar permintaan berasal dari bot yang mencoba memeriksa isi folder tersebut untuk dieksploitasi. Mereka akan disaring secara efektif, dan jika perlu Anda dapat menampilkan beberapa halaman 404 statis kecil.

Permintaan lain masih akan ditangani oleh wordpress, dan jika seseorang memasukkan alamat yang salah, itu akan menampilkan pesan yang tidak ditemukan oleh pengguna di dalam templat Anda. Solusi dari Chris_O hanya akan berfungsi untuk permintaan yang terlihat seperti ekstensi file, jika tidak mereka juga akan ditangani oleh wordpress.

Untuk membuatnya lebih dapat diandalkan, Anda dapat mengambil file akses mentah dan mencari 404 kesalahan. Jika Anda melihat banyak permintaan yang dimulai dengan baris tertentu, Anda juga dapat memasukkannya ke filter ini:

#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>
Anonim
sumber
0

Saya memiliki beberapa CMS yang diinstal di situs saya jadi saya menggunakan sesuatu seperti ini untuk menggunakan halaman kesalahan 404 yang sama untuk semua CMS. Saya menggunakan conf ini untuk Nginx + FastCgi dan itu berfungsi dengan baik:

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

Saya menggunakan konfigurasi ini bersama dengan ini di php.ini:

cgi.fix_pathinfo = 1 

wordpress diinstal seperti ini http://example.com/wordpress/ . 404.html terletak di root http://example.com/ .

PS Jangan lupa bahwa layanan PHP dan Nginx perlu di-restart setelah membuat perubahan pada file php.ini atau nginx.conf agar perubahan dapat diterapkan.

eliz82
sumber
-3

Ada 3 cara untuk melakukan ini

  1. Dengan mengubah kode 404.php Anda.
  2. Dengan menggunakan plugin wordpress.
  3. Dengan mengedit file .htaccess Anda.

Tutorial lengkap - (tautan mati dan dialihkan ke spam)

Mazhar
sumber
Halo Mazhar, bisakah Anda memposting jawaban lengkap, bukan hanya tautan ke situs Anda. Jika tautan itu mati, jawaban ini akan sangat tidak berguna! Bersulang!
Stephen Harris
halaman ini memberikan 404. Ironis. Atau Anda mencoba mengatakan sesuatu?
Michiel van der Blonk