خطای Mixed Content چیست و چرا بعد از SSL رخ میدهد؟
یکی از رایجترین مشکلاتی که صاحبان سایت وردپرسی بلافاصله بعد از فعالسازی گواهینامه SSL با آن مواجه میشوند، خطای Mixed Content است. این خطا زمانی رخ میدهد که صفحه شما از طریق پروتکل امن HTTPS بارگذاری میشود، اما برخی از منابع داخلی مثل تصاویر، فایلهای CSS، اسکریپتهای جاوااسکریپت یا فونتها همچنان از طریق HTTP (بدون S) فراخوانی میشوند.
مرورگرهای مدرن مثل Chrome، Firefox و Edge این وضعیت را یک تهدید امنیتی تلقی میکنند و یا یک هشدار قفل شکسته در نوار آدرس نشان میدهند یا بعضی منابع را کاملاً بلاک میکنند. نتیجه این است که سایت شما با وجود SSL، ناامن به نظر میرسد و اعتماد کاربران را از دست میدهد.
چرا این اتفاق میافتد؟
وقتی سایت شما قبلاً روی HTTP بوده، تمام آدرسهای داخلی با http:// در پایگاه داده ذخیره شدهاند. بعد از فعالسازی SSL و تغییر آدرس سایت به HTTPS، این لینکهای قدیمی بهصورت خودکار آپدیت نمیشوند. به همین دلیل حتی اگر SSL شما کاملاً درست نصب شده باشد، باز هم این خطا ظاهر میشود.
منابع رایجی که باعث این مشکل میشوند عبارتند از:
- تصاویر آپلودشده در کتابخانه رسانه وردپرس
- فایلهای CSS و JS پوسته و افزونهها
- فونتهای بارگذاریشده از سرور خودتان
- لینکهای تعبیهشده در متن نوشتهها و صفحات
- آدرسهای ذخیرهشده در تنظیمات ویجتها و المنتور/بیکر
چطور خطای Mixed Content را در وردپرس رفع کنیم؟
روش اول: استفاده از افزونه Really Simple SSL
سادهترین روش برای اکثر کاربران، نصب افزونه Really Simple SSL است. این افزونه بهصورت خودکار تمام لینکهای HTTP را به HTTPS تغییر میدهد و هدرهای امنیتی لازم را نیز اعمال میکند. بعد از نصب و فعالسازی، فقط کافی است روی دکمه «فعالسازی SSL» کلیک کنید.
روش دوم: بهروزرسانی آدرسها در پایگاه داده با Search & Replace
اگر میخواهید مستقیماً آدرسهای HTTP را در دیتابیس تغییر دهید، از افزونه Better Search Replace استفاده کنید:
- افزونه را نصب و فعال کنید
- در فیلد «Search for» مقدار
http://yourdomain.comرا وارد کنید - در فیلد «Replace with» مقدار
https://yourdomain.comرا بنویسید - تمام جداول را انتخاب کنید و روی «Run Search/Replace» کلیک کنید
روش سوم: تنظیم آدرس سایت در وردپرس
وارد تنظیمات > عمومی شوید و مطمئن شوید هر دو فیلد «آدرس وردپرس» و «آدرس سایت» با https:// شروع میشوند. این کار پایهایترین قدم است که باید انجام شود.
روش چهارم: اضافه کردن ریدایرکت در .htaccess
اگر از سرور Apache استفاده میکنید، میتوانید کد زیر را به ابتدای فایل .htaccess اضافه کنید تا تمام درخواستهای HTTP به HTTPS هدایت شوند:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
روش پنجم: بررسی منابع خارجی
گاهی منشأ مشکل، اسکریپتها یا فونتهایی هستند که از سرورهای خارجی با HTTP بارگذاری میشوند. برای شناسایی این موارد، در مرورگر کروم F12 را بزنید، به تب Console بروید و دنبال پیامهایی با عبارت «Mixed Content» بگردید. آدرس منبع مشکلدار دقیقاً نشان داده میشود.
چطور مطمئن شویم مشکل کاملاً رفع شده؟
بعد از اعمال تغییرات، کش مرورگر را خالی کنید (Ctrl+Shift+Delete) و سایت را مجدداً باز کنید. اگر آیکون قفل سبز در کنار آدرس سایت نمایش داده شد، مشکل Mixed Content کاملاً رفع شده است. همچنین میتوانید از ابزار آنلاین whynopadlock.com برای اسکن کامل سایت خود استفاده کنید.
علاوه بر این، کش افزونههای کشساز مثل W3 Total Cache یا WP Rocket را نیز پاک کنید، چون ممکن است نسخههای قدیمی HTTP صفحات را در حافظه نگه داشته باشند.
نقش هاست در جلوگیری از مشکلات SSL
یکی از دلایل اصلی که کاربران با مشکلات SSL و Mixed Content دستوپنجه نرم میکنند، استفاده از هاستهایی است که SSL را بهدرستی پشتیبانی نمیکنند یا فرایند فعالسازی آن پیچیده است. یک هاست وردپرس حرفهای باید SSL رایگان Let’s Encrypt را بهصورت خودکار نصب و تمدید کند و تمام ریدایرکتهای لازم را از پیش تنظیم کرده باشد.
در میهن هاستینگ، تمام پلنهای هاست وردپرس با SSL رایگان، نصب خودکار و پنل کاربری ساده ارائه میشوند. اگر از هاست فعلیتان راضی نیستید و با مشکلاتی مثل Mixed Content، سرعت پایین یا پشتیبانی ضعیف دستوپنجه نرم میکنید، همین الان میتوانید هاست وردپرس میهن هاستینگ را بررسی کنید.
جمعبندی
خطای Mixed Content یک مشکل رایج اما کاملاً قابل حل است. با استفاده از روشهای گفتهشده — بهخصوص افزونه Really Simple SSL و بهروزرسانی آدرسهای دیتابیس — میتوانید در کمتر از ۱۵ دقیقه این مشکل را برطرف کنید. اما اگر میخواهید از ابتدا سایت وردپرسیتان را روی بستری قرار دهید که این مشکلات از اساس پیش نیاید، انتخاب یک هاست وردپرس باکیفیت اولین و مهمترین قدم است.
