ก่อนอื่นเซิร์ฟเวอร์ของฉันกำลังนั่งอยู่หลังโหลดบาลานเซอร์ ใบรับรอง SSL ของฉันตั้งอยู่บน load balancer และจัดการ HTTPS ข้อมูลที่เข้ามาในพอร์ต 443 จะถูกส่งต่อไปยังเซิร์ฟเวอร์ Wordpress โดยใช้ HTTP ที่พอร์ต 80
อย่างไรก็ตาม wordpress และ php ไม่รู้จักการกำหนดค่าเซิร์ฟเวอร์ของฉัน นี่ทำให้เบราว์เซอร์สงสัยเกี่ยวกับความถูกต้องของใบรับรอง SSL ที่ถูกต้องของฉัน
ในการแก้ไขปัญหานี้ฉันได้เพิ่มรหัสต่อไปนี้ลงใน functions.php ฉันพบรหัสที่นี่และCodex ตกลง
/**
* 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';
}
วิธีนี้ใช้งานได้ดีสำหรับส่วนหน้า แต่ตอนนี้ / wp-admin / ไม่สามารถเข้าถึงได้แม้จะมีบัญชีผู้ดูแลระบบของฉัน หลังจากเข้าสู่ระบบฉันได้รับข้อความ "ขออภัยคุณไม่ได้รับอนุญาตให้เข้าถึงหน้านี้" ไม่มีความช่วยเหลืออื่นให้ไว้
ดังนั้นฉันค้นหาผ่านโฟลเดอร์ wp-admin และค้นพบว่าคำว่า "ขออภัยคุณไม่ได้รับอนุญาตให้เข้าถึงหน้านี้" ปรากฏ 17 ครั้งที่แตกต่างกัน
ข้อความแสดงข้อผิดพลาดส่วนใหญ่เกี่ยวข้องกับการตรวจสอบการอนุญาตของผู้ใช้
ฉันจะให้ 'เปิด' HTTPS และรักษาการเข้าถึงของผู้ดูแลระบบได้อย่างไร
สรุป:
- ก่อนที่จะเพิ่มตรรกะ HTTP_X_FORWARDED_PROTO ให้กับ function.php ฉันสามารถเข้าถึง wp-admin /
- หลังจากเพิ่มตรรกะ HTTP_X_FORWARDED_PROTO ลงใน function.php ฉันไม่สามารถเข้าถึง wp-admin /
- หลังจากลบตรรกะ HTTP_X_FORWARDED_PROTO ไปที่ functions.php ฉันไม่สามารถเข้าถึง wp-admin /
UPDATE:
ฉันพบว่าข้อความแสดงข้อผิดพลาดนั้นมาจาก wp-admin / menu.php และโค้ดอันนี้ที่ด้านล่าง ฉันเพิ่มลงmenu.php
ในตอนท้ายของข้อผิดพลาดเพื่อหาว่ามันเป็นไฟล์นี้
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 );
}
ฉันยังไม่เข้าใจวิธีการแก้ไขนี้
define('FORCE_SSL_ADMIN', true);