Özel 401, 403 ve 500 hata sayfaları nasıl oluşturulur?


27

Bir 404 hatasıyla karşılaşıldığında, 404.php şablon dosyası özel bir hata mesajı oluşturmak için kullanılabilir. Bu, Şablon Hiyerarşisi makalesinde belgelenmiştir .

Amacım 401, 403 ve 500 hataları için özel hata sayfaları oluşturmak. Temalarımın dizininde 401.php, 403.php ve 500.php dosyaları oluşturmayı denedim, ancak bu çalışmıyor.

WordPress'te özel 401, 403 ve 500 hata sayfalarını nasıl oluşturabilirim?


2
Bu kodu bir başlangıç ​​noktası olarak kullanmayı deneyebilirsiniz: jesin.tk/wordpress-custom-403-401-error-page
Joe

İşte 403 ve 401 hataları gibi hata sayfalarını kişiselleştirmenize izin veren mevcut bir eklenti: http://wordpress.org/plugins/custom-error-pages/ Tek yapmanız gereken, yüklemek ve etkinleştirmek. Ancak, eklenti seçenekleri sayfasında belirtilen .htaccess (veya nginx.conf) dosyasını el ile düzenlemeniz gerekir.
Pi Lover

Yanıtlar:


15

Hata sayfaları .HTACCESS aracılığıyla sunulur, Apache kullanıyorsanız ErrorDocumentyönergeyi kullanır ve ona durumu ve URL'yi eklersiniz.

Böylece .htaccess dosyanızda şöyle görünür:

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

Aşağıdaki işlevi kullanabilirsiniz. Bu, HTACCESS dosyasına sizin için gerekenleri dinamik olarak ekler veya el ile yapabilirsiniz.

1. Sayfa Ekle:

Daha sonra Kontrol Panelinize girmeniz ve normal bir sayfa gibi ('Kontrol Paneli'> 'Sayfalar'> 'Yeni') Sayfalar oluşturmanız gerekir. İstediklerinize her ne kadar başlık koyarlarsa, sümüklü böceklerin aşağıdaki fonksiyondakiyle aynı olduğundan emin olun (Sümüklü böcek: hata 401, hata 403, hata 404, hata-500). Ayrıca, bu belirli sayfalar için istediğiniz düzeni ve stili oluşturmak için sayfa şablonunu kullanabilirsiniz. Bunun için WordPress Codex talimatlarını izleyin .

2. İşlev Ekle:

// 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 !! YUKARI FONKSİYONLA İLGİLİ NOTLAR

Web sitenizi taşırken veya URL yapısını değiştirirken

Yukarıdaki fonksiyonla hatırlanması gereken şey, onları HTACCESS dosyanıza yazmadan önce ErrorDocument yönergelerinin zaten var olup olmadığını kontrol etmesine rağmen, güncellenmiş sayfa konumlarını yansıtacak şekilde blogunuzu değiştirmeniz veya taşımanız durumunda ErrorDocument direktiflerini yeniden yazmayacaktır. Önce HTACCESS dosyanızdaki mevcut ErrorDocument yönergelerini silmeniz ve ardından yeni yönergeleri oluşturmak için bu fonksiyonu tekrar çalıştırmanız gerekir.

YALNIZCA fonksiyonu ateşlemek için Doğru Kanca

Unutulmaması gereken başka bir şey de bu işlevdir, initeylemler sayfalarınızın her gereksiz yüklenmesinde ve gereksiz olmasına neden olacak şekilde çalıştırılır, bu yüzden onu bir eklentiye eklemeyi ve bunun register_activation_hookyerine bir eklentiyi etkinleştirmeyi başlatmasını öneririm

Dosya izinleri

Ayrıca yukarıdaki işlevi kullanırken .htaccess'inizin yazılabilir olması zorunludur, bu yüzden CHMOD777 gibi bir dosyaya sahip olduğundan emin olun.


Bunun nasıl çalışması gerektiğinden emin değil, düzenlemeleri elle .htaccess dosyasına yaptım, ancak bu işe yaramadı. Bunu localhost'ta yapmaya çalışıyorum ve bu, localhost'ta mümkün olmalı, çünkü her şeye, sunucuya ve müşteriye erişebiliyorum. Ama bu neden çalışmıyor?
Solomon Closson,

@SolomonClosson, belki bunun için yazdığım eklentiyi kullanmayı deneyebilirsiniz, sizin için her şeyi yapar ve yukarıdaki kodu tam olarak izler :). Resmi WordPress.Org Eklentisi
Matt Royal

@MattRoyal İşlev harika çalışıyor ve diğer htaccess kurallarını oluşturmak için kullanıyorum. Kuralların dosyanın en üstüne, varsayılan wp htaccess kurallarının üzerine eklenmesini nasıl sağlayabilirim? Şu anda, htaccess dosyasının altına kurallar eklenmiştir. Teşekkür ederim.
lowtechsun

Bu çözüme katılmıyorum: 1- Bir web sunucusu üzerinde 777 hiçbir şey yapmamalısınız! Bu genel olarak sadece kötü bir uygulama ve büyük güvenlik açıklarına yol açıyor. 2- Web sitesine her istek için bir dosya yazma ekliyorsunuz, bir yazma işlemi olarak dosya üzerinde bir kilit oluşturacak ve o anda sadece bir yazma işlemine izin verecek ve o anda isteklerinizi azaltacak ve aynı anda cevap vereceksiniz. 3- Bir web sitesi çalıştığı sunucunun bağımlılıklarına sahip olmamalıdır, örneğin nginx'in kullanıldığı bir sisteme taşınırsa, beklendiği gibi çalışmayı durduracaktır. ... devam ediyor
Eduardo Oliveira

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.