09. tháng 4 2025
Tôi đã phát hiện ra rằng một trang web sử dụng nền tảng Wordpress có giao diện bị rối loạn. Sau khi kiểm tra kỹ bằng công cụ kiểm tra của trình duyệt, tôi nhận thấy rằng các tệp tin CSS và JS cần thiết cho giao diện đều không thể tải được. Nguyên nhân là vì trang web này sử dụng đường dẫn HTTPS, nhưng các liên kết đến các tệp CSS và JS lại vẫn đang dùng HTTP. Do đó, trình duyệt không chấp nhận chúng.
Khi xem xét tập tin styles.php trong chủ đề (theme) đang sử dụng:
wp-content/themes/some_theme/framework/styles.php
Mặc dù đã có hàm is_ssl() để kiểm tra xem liệu trang web có đang chạy trên HTTPS hay không, nhưng thực tế thì tất cả các lệnh enqueue_style đều chỉ sử dụng HTTP để tải các tài nguyên. Điều này cho thấy rằng hàm is_ssl() dường như không hoạt động đúng cách.
Bây giờ, hãy quay trở lại phần Web cá độ bóng đá mã nguồn gốc của WordPress:
wp-includes/load.php
function is_ssl() {
if ( isset( $_SERVER['HTTPS'] ) ) {
if ( 'on' === strtolower( $_SERVER['HTTPS'] ) ) {
return true;
}
if ( '1' === (string) $_SERVER['HTTPS'] ) {
return true;
}
} elseif ( isset( $_SERVER['SERVER_PORT'] ) && ( '443' === (string) $_SERVER['SERVER_PORT'] ) ) {
return true;
}
return false;
}
Từ đoạn mã trên, có vẻ như vấn đề nằm ở cấu hình Nginx. Có khả năng biến môi trường cần thiết không được truyền đúng cách từ máy chủ Nginx sang ứng dụng PHP. Tuy nhiên, tôi cảm thấy không nên chỉnh sửa cấu hình Nginx trực tiếp vì trang web này thuộc sở hữu của người khác và được quản lý thông qua Bao Tháp (宝塔). Tôi không chắc chắn về cơ chế hoạt động của Bao Tháp, vì vậy tốt hơn là không can thiệp vào cấu hình Nginx.
Thay vào đó, tôi quyết định thay đổi hàm is_ssl() để luôn trả về giá trị true. Cách làm này sẽ đảm bảo rằng tất cả các tài nguyên đều được tải qua HTTPS mà không cần phải điều chỉnh cấu hình máy chủ.
Ngoài ra, để tránh tình trạng tương tự xảy ra trong tương lai, bạn có thể cân nhắc việc sử dụng các phương pháp sau:
Hy vọng keo nha cái rằng những giải pháp trên sẽ giúp khắc phục triệt để vấn đề!