Làm cách nào để tạo các trang lỗi 401, 403 và 500 tùy chỉnh?


27

Khi gặp lỗi 404, tệp mẫu 404.php có thể được sử dụng để hiển thị thông báo lỗi tùy chỉnh. Điều này được ghi lại trong bài viết Phân cấp mẫu .

Mục đích của tôi là tạo các trang lỗi tùy chỉnh cho các lỗi 401, 403 và 500. Tôi đã thử tạo các tệp 401.php, 403.php và 500.php trong thư mục của chủ đề của mình nhưng điều này không hoạt động.

Làm cách nào tôi có thể tạo các trang lỗi 401, 403 và 500 tùy chỉnh trong WordPress?


2
Bạn có thể thử sử dụng mã này làm điểm bắt đầu: jesin.tk/wordpress-custom-403-401-error-page
Joe

Đây là một plugin hiện có cho phép bạn tùy chỉnh các trang lỗi như 403 và 401 lỗi: http://wordpress.org/plugins/custom-error-pages/ Tất cả những gì bạn phải làm là cài đặt và kích hoạt. Tuy nhiên, bạn phải chỉnh sửa thủ công tệp .htaccess (hoặc nginx.conf) được chỉ định trong trang tùy chọn bổ trợ.
Người yêu Pi

Câu trả lời:


15

Các trang lỗi được cung cấp qua .HTACCESS, nếu bạn đang sử dụng Apache, bạn sẽ sử dụng lệnh ErrorDocumentnày và thêm trạng thái và URL vào đó.

Vì vậy, nó sẽ trông như thế này trong tệp .htaccess của bạn:

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

Bạn có thể sử dụng các chức năng sau đây. Điều này sẽ tự động thêm những gì cần thiết vào tệp HTACCESS cho bạn hoặc bạn có thể tự làm điều đó.

1. Thêm trang:

Sau đó, bạn sẽ cần truy cập Bảng điều khiển của mình và tạo Trang giống như bất kỳ trang bình thường nào ('Bảng điều khiển'> 'Trang'> 'Mới'). Chúng có thể được đặt tiêu đề bất cứ điều gì bạn muốn, chỉ cần đảm bảo sên giống như trong hàm bên dưới (Slug: error-401, error-403, error-404, error-500). Ngoài ra, bạn có thể sử dụng mẫu trang để tạo bất kỳ bố cục và kiểu dáng nào bạn muốn cho các trang cụ thể này. Làm theo hướng dẫn WordPress Codex cho việc này.

2. Thêm chức năng:

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

Lưu ý !! GHI CHÚ VỀ CHỨC NĂNG TRÊN

Khi di chuyển trang web của bạn hoặc thay đổi cấu trúc URL

Điều cần nhớ với chức năng trên là mặc dù nó sẽ kiểm tra xem các chỉ thị ErrorDocument đã tồn tại trước khi ghi chúng vào tệp HTACCESS của bạn hay chưa, nó sẽ không viết lại các chỉ thị ErrorDocument nếu bạn thay đổi hoặc di chuyển blog của bạn để phản ánh các vị trí trang được cập nhật. Trước tiên, bạn cần xóa các chỉ thị ErrorDocument trong tệp HTACCESS của mình và sau đó chạy lại chức năng này để tạo các lệnh mới.

Hook chính xác để kích hoạt chức năng CHỈ MỘT LẦN

Một điều khác cần lưu ý là chức năng này, sử dụng inithành động sẽ chạy mỗi khi tải trang của bạn là điều không cần thiết và lãng phí, vì vậy tôi khuyên bạn nên thêm nó vào plugin và sử dụng register_activation_hookthay vì vậy nó chỉ kích hoạt một lần khi kích hoạt plugin

Quyền tập tin

Ngoài ra, điều bắt buộc là .htaccess của bạn có thể ghi được khi sử dụng chức năng trên, vì vậy hãy đảm bảo rằng nó có quyền truy cập tệp chính xác, giống như CHMOD777.


Không chắc cách thức này hoạt động, đã chỉnh sửa thủ công tệp .htaccess, nhưng điều này không hoạt động. Tôi đang cố gắng làm điều này trên localhost và điều này có thể thực hiện được trên localhost, vì tôi có quyền truy cập vào mọi thứ, máy chủ và máy khách. Nhưng tại sao điều này không hoạt động?
Solomon Closson

@SolomonClosson, có lẽ bạn có thể thử sử dụng plugin tôi đã viết cho cái này, nó sẽ làm mọi thứ cho bạn và làm theo mã chính xác ở trên :). Plugin WordPress.Org chính thức
Matt Royal

@MattRidel Hàm này hoạt động rất tốt và tôi đang sử dụng nó để tạo các quy tắc htaccess khác. Làm thế nào tôi có thể làm cho các quy tắc được chèn ở đầu tệp, trên các quy tắc mặc định wp htaccess mặc định? Tại thời điểm này, các quy tắc được thêm vào ở dưới cùng của tập tin htaccess. Cảm ơn bạn.
lowTechsun

Tôi không đồng ý với giải pháp: 1- BẠN KHÔNG NÊN 777 bất cứ điều gì trên máy chủ web! Đó chỉ là một thực tế tồi tệ nói chung và dẫn đến lỗ hổng bảo mật lớn. 2- Bạn đang thêm một tập tin ghi vào mỗi yêu cầu vào trang web, là một hành động ghi, nó sẽ tạo ra một khóa trên tập tin chỉ cho phép một lần ghi vào lúc bạn sẽ giảm số lượng yêu cầu của bạn và trả lời đồng thời. 3- Một trang web không nên có sự phụ thuộc của máy chủ nơi nó chạy, nếu nó được di chuyển đến một hệ thống mà nginx được sử dụng chẳng hạn, nó sẽ ngừng hoạt động như mong đợi. ... tiếp tục
Eduardo Oliveira

4 - Có nhiều cách để lấy lỗi stackoverflow.com/a/34619308/768516
Eduardo Oliveira
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.