Bỏ qua tới nội dung
Sửa lỗi website· ·5 phút đọc

Cách sửa lỗi mixed content (mất khoá xanh HTTPS)

Vũ Đức Minh
Cách sửa lỗi mixed content (mất khoá xanh HTTPS)
Cỡ chữ

Lỗi mixed content xảy ra khi trang chạy qua HTTPS nhưng vẫn nhúng tài nguyên (ảnh, CSS, JS, font) qua HTTP — khiến trình duyệt báo “không an toàn” và mất khoá xanh. Thường gặp sau khi vừa gắn chứng chỉ SSL. Bài này chỉ cách sửa tận gốc, an toàn cho dữ liệu.

Vì sao mất khoá xanh sau khi gắn SSL

Sau khi chuyển sang HTTPS, nội dung cũ trong cơ sở dữ liệu vẫn còn nhiều đường dẫn http:// cứng (trong bài viết, cấu hình theme, plugin). Trình duyệt thấy trang an toàn (HTTPS) lại tải tài nguyên không an toàn (HTTP) nên cảnh báo và bỏ khoá xanh.

Cách sửa theo thứ tự

  1. Mở Công cụ nhà phát triển → Console để biết chính xác tài nguyên http nào đang bị chặn.
  2. Đổi đường dẫn trong cơ sở dữ liệu từ http://tenmien sang https://tenmien. Cách an toàn:
    • Plugin Better Search Replace, hoặc
    • WP-CLI: wp search-replace 'http://tenmien' 'https://tenmien' --report-changed-only (chừa các bảng không liên quan, không dùng --all-tables bừa).
  3. Plugin vá nhanh tạm thời (Really Simple SSL / SSL Insecure Content Fixer) — coi là giải pháp tạm, đổi đường dẫn trong cơ sở dữ liệu mới là sửa gốc.
  4. Tài nguyên ngoài không hỗ trợ HTTPS: không vá sạch được — phải gỡ hoặc thay nguồn khác.
  5. Xoá cache (kể cả CDN) sau khi sửa.

Vì sao không được chạy SQL thô để đổi đường dẫn

WordPress lưu nhiều cấu hình (tuỳ chọn theme, dữ liệu widget, cài đặt plugin) dưới dạng “serialize” — một chuỗi có ghi sẵn độ dài của từng giá trị. Khi bạn đổi http://tenmien (16 ký tự) thành https://tenmien (17 ký tự), độ dài thay đổi. Nếu chạy câu lệnh SQL REPLACE() thô, nó đổi chữ nhưng không cập nhật con số độ dài → chuỗi serialize hỏng → vỡ cấu hình theme/widget. Đó là lý do bắt buộc dùng Better Search Replace hoặc WP-CLI: chúng hiểu serialize và sửa lại độ dài cho đúng.

Sai lầm nguy hiểm cần tránh

Tuyệt đối không chạy câu lệnh SQL REPLACE() thô trên các bảng như wp_options, wp_postmeta để đổi đường dẫn. WordPress lưu nhiều dữ liệu dạng “serialize”; lệnh thô sẽ làm hỏng chuỗi này, gây vỡ widget và cấu hình theme. Luôn dùng plugin hoặc WP-CLI — chúng tự xử lý dữ liệu serialize đúng cách.

Phòng tái diễn

Gắn SSL xong là chạy đổi đường dẫn ngay; đặt Site URL và Home URL đúng dạng https; ưu tiên đường dẫn tương đối cho tài nguyên nội bộ khi có thể. Cần hỗ trợ chuyển HTTPS sạch, xem dịch vụ sửa chữa website.

Tìm đúng tài nguyên lỗi bằng Console

Trước khi sửa, nên biết chính xác cái gì đang gây mixed content để khỏi đoán mò:

  1. Mở trang bị lỗi, nhấn F12 để mở Công cụ nhà phát triển, chọn tab Console.
  2. Tìm các dòng cảnh báo “Mixed Content: The page was loaded over HTTPS, but requested an insecure…”. Mỗi dòng chỉ rõ một tài nguyên http:// đang bị chặn — ảnh, file CSS, JS, hay font.
  3. Ghi lại nguồn của chúng: nếu là tài nguyên nội bộ (cùng tên miền) thì đổi đường dẫn trong cơ sở dữ liệu sẽ xử hết; nếu là tài nguyên bên ngoài không hỗ trợ HTTPS thì phải thay nguồn khác hoặc gỡ.

Cách này giúp bạn phân biệt ngay “sửa được bằng đổi đường dẫn” hay “phải thay nguồn ngoài”, thay vì cài hết plugin này tới plugin khác mà vẫn còn cảnh báo.

Câu hỏi thường gặp

Cài plugin SSL là hết mixed content chưa?

Plugin chỉ vá tạm ở tầng hiển thị. Để sạch gốc, vẫn nên đổi đường dẫn http sang https trong cơ sở dữ liệu.

Vì sao không nên chạy SQL REPLACE thẳng?

Vì nó làm hỏng dữ liệu serialize của WordPress, gây vỡ cấu hình. Dùng Better Search Replace hoặc WP-CLI để an toàn.

Nguồn: WPBeginner — Fix the Mixed Content Error.

Đọc tiếp

Bài viết
cùng chủ đề.

Tất cả bài viết