Trước hết máy chủ của tôi đang ngồi phía sau một bộ cân bằng tải. Chứng chỉ SSL của tôi nằm trên bộ cân bằng tải và xử lý HTTPS. Dữ liệu đến trên cổng 443 được chuyển tiếp đến máy chủ Wordpress bằng HTTP trên cổng 80.
Tuy nhiên, wordpress và php không biết cấu hình máy chủ của tôi. Điều này khiến trình duyệt nghi ngờ về tính hợp lệ của chứng chỉ SSL hợp lệ của tôi.
Để sửa lỗi này, tôi đã thêm đoạn mã sau vào hàm.php. Tôi tìm thấy mã này ở đây và codex đồng ý .
/**
* Make PHP HTTPS aware via HTTP_X_FORWARDED_PROTO
*/
if(isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {
$_SERVER['HTTPS']='on';
}
Điều này hoạt động rất tốt cho frontend, nhưng bây giờ / wp-admin / không thể truy cập được ngay cả với tài khoản Admin của tôi. Sau khi đăng nhập tôi nhận được một tin nhắn, "Xin lỗi, bạn không được phép truy cập trang này." Không có sự giúp đỡ nào khác được cung cấp.
Vì vậy, tôi đã tìm kiếm thông qua thư mục wp-admin và phát hiện ra rằng dòng chữ "Xin lỗi, bạn không được phép truy cập trang này." xuất hiện 17 lần khác nhau.
Hầu hết các thông báo lỗi này được liên kết với kiểm tra quyền của người dùng.
Làm cách nào để giữ HTTPS 'bật' và duy trì quyền truy cập của quản trị viên?
Tóm lược:
- Trước khi thêm logic HTTP_X_FORWARDED_PROTO vào hàm.php Tôi có thể truy cập wp-admin /
- Sau khi thêm logic HTTP_X_FORWARDED_PROTO vào hàm.php Tôi không thể truy cập wp-admin /
- Sau khi xóa logic HTTP_X_FORWARDED_PROTO sang hàm.php Tôi không thể truy cập wp-admin /
CẬP NHẬT:
Tôi đã phát hiện ra rằng thông báo lỗi đến từ wp-admin / menu.php và đoạn mã này ở phía dưới. Tôi đã thêm vào menu.php
cuối lỗi để tìm ra rằng đó là tập tin này.
if ( !user_can_access_admin_page() ) {
/**
* Fires when access to an admin page is denied.
*
* @since 2.5.0
*/
do_action( 'admin_page_access_denied' );
wp_die( __( 'Sorry, you are not allowed to access this page. menu.php'), 403 );
}
Tôi vẫn không hiểu làm thế nào để sửa lỗi này.
define('FORCE_SSL_ADMIN', true);