วิธีสร้างหน้าแสดงข้อผิดพลาด 401, 403 และ 500 ที่กำหนดเองได้อย่างไร


27

เมื่อพบข้อผิดพลาด 404 ไฟล์เท็มเพลต 404.php สามารถใช้เพื่อแสดงข้อความข้อผิดพลาดที่กำหนดเอง นี่คือเอกสารในบทความลำดับชั้นของแม่แบบ

เป้าหมายของฉันคือการสร้างหน้าข้อผิดพลาดที่กำหนดเองสำหรับข้อผิดพลาด 401, 403 และ 500 ฉันได้ลองสร้างไฟล์ 401.php, 403.php และ 500.php ในไดเรกทอรีของธีม แต่ไม่ได้ผล

ฉันจะสร้างหน้าแสดงข้อผิดพลาด 401, 403 และ 500 ที่กำหนดเองใน WordPress ได้อย่างไร


2
คุณสามารถลองใช้รหัสนี้เป็นจุดเริ่มต้น: jesin.tk/wordpress-custom-403-401-error-page
Joe

นี่คือปลั๊กอินที่มีอยู่ซึ่งให้คุณปรับแต่งหน้าหน้าข้อผิดพลาดเช่นข้อผิดพลาด 403 และ 401: http://wordpress.org/plugins/custom-error-pages/สิ่งที่คุณต้องทำคือติดตั้งและเปิดใช้งาน อย่างไรก็ตามคุณต้องแก้ไขไฟล์. htaccess (หรือ nginx.conf) ด้วยตนเองที่ระบุในหน้าตัวเลือกปลั๊กอิน
Pi Lover

คำตอบ:


15

หน้าแสดงข้อผิดพลาดจะถูกใช้งานผ่าน. HTML, หากคุณใช้ Apache คุณจะต้องใช้ErrorDocumentคำสั่งและเพิ่มสถานะและ URL ลงไป

ดังนั้นจะมีลักษณะเช่นนี้ในไฟล์. htaccess ของคุณ:

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

คุณสามารถใช้ฟังก์ชั่นต่อไปนี้ด้านล่าง สิ่งนี้จะเพิ่มสิ่งที่จำเป็นในไฟล์ HTACCESS ให้คุณแบบไดนามิกหรือคุณสามารถทำได้ด้วยตนเอง

1. เพิ่มหน้า:

จากนั้นคุณจะต้องเข้าไปที่หน้าแดชบอร์ดของคุณและสร้างหน้าเช่นหน้าปกติ ('แดชบอร์ด'> 'หน้า'> 'ใหม่') พวกเขาสามารถตั้งชื่อสิ่งที่คุณต้องการเพียงให้แน่ใจว่าทากนั้นเหมือนกับฟังก์ชั่นด้านล่าง (Slug: error-401, error-403, error-404, error-500) นอกจากนี้คุณสามารถใช้เทมเพลตหน้าเพื่อสร้างเลย์เอาต์และสไตล์ที่คุณต้องการสำหรับเพจเฉพาะเหล่านี้ ทำตามคำแนะนำWordPress Codexสำหรับสิ่งนี้

2. เพิ่มฟังก์ชั่น:

// 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 !! หมายเหตุในฟังก์ชั่นข้างต้น

เมื่อย้ายเว็บไซต์ของคุณหรือเปลี่ยนโครงสร้าง URL

สิ่งที่ต้องจำไว้กับฟังก์ชั่นด้านบนคือแม้ว่ามันจะตรวจสอบเพื่อดูว่าคำสั่ง ErrorDocument มีอยู่แล้วก่อนที่จะเขียนไปยังไฟล์ HTACCESS ของคุณมันจะไม่เขียนคำสั่ง ErrorDocument อีกครั้งหากคุณเปลี่ยนหรือย้ายบล็อกของคุณ คุณจะต้องลบคำสั่ง ErrorDocument ที่มีอยู่ในไฟล์ HTACCESS ของคุณก่อนจากนั้นเรียกใช้ฟังก์ชันนี้อีกครั้งเพื่อสร้างคำสั่งใหม่

แก้ไข Hook เพื่อใช้งานฟังก์ชันเพียงครั้งเดียวเท่านั้น

สิ่งอื่นที่ควรทราบคือฟังก์ชั่นนี้การใช้initแอคชั่นจะทำงานทุกครั้งที่หน้าเว็บของคุณโหลดซึ่งไม่จำเป็นและสิ้นเปลืองมากดังนั้นฉันขอแนะนำให้เพิ่มเข้าไปในปลั๊กอินและใช้ส่วนที่register_activation_hookค่อนข้างมาก

สิทธิ์ของไฟล์

นอกจากนี้มีความจำเป็นที่. htaccess ของคุณสามารถเขียนได้เมื่อใช้ฟังก์ชั่นด้านบนดังนั้นตรวจสอบให้แน่ใจว่ามีการอนุญาตไฟล์ที่ถูกต้องเช่น CHMOD777


ไม่แน่ใจว่าวิธีการนี้ทำงานอย่างไรการแก้ไขด้วยตนเองไปยังไฟล์. htaccess แต่วิธีนี้ไม่ทำงาน ฉันกำลังพยายามทำสิ่งนี้บน localhost และควรเป็นไปได้บน localhost เนื่องจากฉันสามารถเข้าถึงทุกอย่างเซิร์ฟเวอร์และไคลเอนต์ แต่ทำไมถึงไม่ทำงาน?
โซโลมอน Closson

@SolomonClosson บางทีคุณสามารถลองใช้ปลั๊กอินที่ฉันเขียนขึ้นมาได้มันจะทำทุกอย่างให้คุณและตามด้วยรหัสด้านบน :) ปลั๊กอิน WordPress อย่างเป็นทางการ
แมตต์รอยัล

@MattRoyal ฟังก์ชั่นใช้งานได้ดีและฉันใช้มันเพื่อสร้างกฎ htaccess อื่น ๆ ฉันจะทำให้กฎถูกแทรกที่ด้านบนสุดของไฟล์เหนือกฎ wta htaccess ที่เป็นค่าเริ่มต้นได้โปรดได้อย่างไร ในขณะนี้กฎจะถูกเพิ่มที่ด้านล่างของไฟล์ htaccess ขอขอบคุณ.
lowtechsun

ฉันไม่เห็นด้วยกับวิธีแก้ปัญหา: 1- คุณไม่ควร 777 อะไรในเว็บเซิร์ฟเวอร์! นั่นเป็นเพียงการปฏิบัติที่ไม่ดีโดยทั่วไปและนำไปสู่ช่องโหว่ด้านความปลอดภัยที่สำคัญ 2- คุณกำลังเพิ่มการเขียนไฟล์ในทุกคำขอไปยังเว็บไซต์การกระทำการเขียนนั้นจะสร้างการล็อคไฟล์ที่อนุญาตให้เขียนได้เพียงครั้งเดียวในเวลาที่คุณจะลดจำนวนการร้องขอและตอบกลับพร้อมกัน 3- เว็บไซต์ไม่ควรมีการอ้างอิงของเซิร์ฟเวอร์ที่มันทำงานถ้ามันถูกย้ายไปยังระบบที่ใช้ nginx มันจะหยุดทำงานตามที่คาดไว้ ... ดำเนินการต่อ
Eduardo Oliveira

4- มีวิธีที่สะอาดกว่าในการจับข้อผิดพลาดstackoverflow.com/a/34619308/768516
Eduardo Oliveira
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.