Bagaimana cara membuat halaman kesalahan 401, 403 dan 500 khusus?

27

Ketika kesalahan 404 ditemukan, file template 404.php dapat digunakan untuk membuat pesan kesalahan khusus. Ini didokumentasikan dalam artikel Templat Hierarki .

Tujuan saya adalah membuat halaman kesalahan khusus untuk 401, 403 dan 500 kesalahan. Saya sudah mencoba membuat file 401.php, 403.php dan 500.php di direktori tema saya tetapi ini tidak berhasil.

Bagaimana saya bisa membuat 401, 403 dan 500 halaman kesalahan khusus di WordPress?

Henryrywright
sumber
2
Anda dapat mencoba menggunakan kode ini sebagai titik awal: jesin.tk/wordpress-custom-403-401-error-page
Joe
Berikut ini adalah plugin yang ada yang memungkinkan Anda menyesuaikan halaman kesalahan seperti kesalahan 403 dan 401: http://wordpress.org/plugins/custom-error-pages/ Yang harus Anda lakukan adalah menginstal dan mengaktifkan. Namun, Anda harus mengedit file .htaccess (atau nginx.conf) secara manual yang ditentukan di halaman opsi plugins.
Pi Kekasih

Jawaban:

15

Halaman kesalahan dilayani melalui .HTACCESS, jika Anda menggunakan Apache Anda akan menggunakan ErrorDocumentarahan dan menambahkan status dan URL ke sana.

Jadi akan terlihat seperti ini di file .htaccess Anda:

ErrorDocument 401 http://yourwebsite.com/error-401
ErrorDocument 403 http://yourwebsite.com/error-403
ErrorDocument 500 http://yourwebsite.com/error-500

Anda dapat menggunakan fungsi berikut di bawah ini. Ini akan secara dinamis menambahkan apa yang diperlukan untuk file HTACCESS untuk Anda atau Anda bisa melakukannya secara manual.

1. Tambahkan Halaman:

Anda kemudian perlu masuk ke Dashboard Anda dan membuat Halaman seperti halaman normal lainnya ('Dashboard'> 'Halaman'> 'Baru'). Mereka dapat diberi judul apa pun yang Anda inginkan, pastikan siput itu sama dengan pada fungsi di bawah (Slug: error-401, error-403, error-404, error-500). Anda juga dapat menggunakan templat halaman untuk membuat tata letak dan gaya apa pun yang Anda inginkan untuk halaman spesifik ini. Ikuti instruksi WordPress Codex untuk ini.

2. Tambahkan Fungsi:

// Create Custom Error Pages in WordPress using HTACCESS
function royal_custom_error_pages() {

    // Get HTACCESS path & dynamic website url
    $htaccess_file = '.htaccess';
    $website_url = get_bloginfo('url').'/';

    // Check & prevent writing error pages more than once
    $check_file = file_get_contents($htaccess_file);
    $this_string = '# BEGIN WordPress Error Pages';

    if( strpos( $check_file, $this_string ) === false) {

    // Setup Error page locations dynamically
    $error_pages .= PHP_EOL. PHP_EOL . '# BEGIN WordPress Error Pages'. PHP_EOL. PHP_EOL;
    $error_pages .= 'ErrorDocument 401 '.$website_url.'error-401'.PHP_EOL;
    $error_pages .= 'ErrorDocument 403 '.$website_url.'error-403'.PHP_EOL;
    $error_pages .= 'ErrorDocument 404 '.$website_url.'error-404'.PHP_EOL;
    $error_pages .= 'ErrorDocument 500 '.$website_url.'error-500'.PHP_EOL;
    $error_pages .= PHP_EOL. '# END WordPress Error Pages'. PHP_EOL;

    // Write the error page locations to HTACCESS
    $htaccess = fopen( $htaccess_file, 'a+');
    fwrite( $htaccess, $error_pages );
    fclose($htaccess);

    }
}

add_action('init','royal_custom_error_pages'); // This will run the function everytime, not ideal!

// register_activation_hook( __FILE__, 'royal_custom_error_pages' ); // Using a plugin, runs only once!

NB !! CATATAN FUNGSI DI ATAS

Saat memindahkan situs web Anda atau mengubah struktur URL

Yang perlu diingat dengan fungsi di atas adalah meskipun ia akan memeriksa untuk melihat apakah arahan ErrorDocument sudah ada sebelum menulis mereka ke file HTACCESS Anda, itu tidak akan menulis ulang arahan ErrorDocument jika Anda mengubah atau memindahkan blog Anda untuk mencerminkan lokasi halaman yang diperbarui. Anda harus menghapus arahan ErrorDocument yang ada di file HTACCESS Anda terlebih dahulu dan kemudian jalankan kembali fungsi ini untuk membuat arahan baru.

Kait yang benar untuk menjalankan fungsi HANYA SEKALI

Hal lain yang perlu diperhatikan adalah fungsi ini, menggunakan inittindakan akan berjalan setiap kali halaman Anda memuat yang super tidak perlu dan boros jadi saya akan menyarankan menambahkannya ke plugin dan menggunakan register_activation_hooklebih dari itu sehingga hanya menyala sekali pada aktivasi plugin

Izin File

Juga sangat penting bahwa .htaccess Anda dapat ditulis saat menggunakan fungsi di atas, jadi pastikan ia memiliki izin file yang benar, seperti CHMOD777.

Matt Royal
sumber
Tidak yakin bagaimana ini seharusnya bekerja, apakah pengeditan secara manual ke file .htaccess, tetapi ini tidak berhasil. Saya mencoba melakukan ini di localhost dan ini harus dimungkinkan di localhost, karena saya memiliki akses ke semuanya, server, dan klien. Tetapi mengapa ini tidak berhasil?
Solomon Closson
@ SolomonClosson, mungkin Anda dapat mencoba menggunakan plugin yang saya tulis untuk ini, ia akan melakukan segalanya untuk Anda dan mengikuti kode di atas persis :). Plugin Resmi WordPress.Org
Matt Royal
@MattRoyal Fungsi ini berfungsi dengan baik dan saya menggunakannya untuk membuat aturan htaccess lainnya. Bagaimana saya bisa membuat aturan dimasukkan di bagian paling atas file, di atas aturan default wp htaccess? Saat ini aturan ditambahkan di bagian bawah file htaccess. Terima kasih.
lowtechsun
Saya tidak setuju dengan solusinya: 1- ANDA TIDAK HARUS 777 apa pun di server web! Itu hanya praktik buruk pada umumnya dan mengarah ke lubang keamanan besar. 2 - Anda menambahkan menulis file pada setiap permintaan ke situs web, menjadi tindakan menulis itu akan membuat kunci pada file yang memungkinkan hanya satu menulis pada saat Anda akan mengurangi jumlah permintaan Anda dan merespons secara bersamaan. 3 - Sebuah situs web tidak boleh memiliki dependensi dari server tempat ia dijalankan, jika ia dimigrasikan ke sistem di mana nginx digunakan misalnya, ia akan berhenti berfungsi seperti yang diharapkan. ... berlanjut
Eduardo Oliveira
4- Ada cara yang lebih bersih untuk mengambil kesalahan stackoverflow.com/a/34619308/768516
Eduardo Oliveira