بعد از فعالسازی گواهی SSL روی سایت وردپرسی، یکی از رایجترین مشکلاتی که کاربران با آن مواجه میشوند، خطای محتوای ترکیبی (Mixed Content) است. این خطا زمانی رخ میدهد که صفحه اصلی سایت شما با پروتکل امن HTTPS بارگذاری میشود، اما برخی از منابع آن (تصاویر، اسکریپتها، استایلها یا فایلهای رسانهای) همچنان با آدرس HTTP قدیمی فراخوانی میشوند. نتیجه این اتفاق، نمایش هشدار امنیتی در مرورگر، نبودن قفل سبز کنار آدرس سایت و در موارد شدید، مسدود شدن کامل برخی المانهاست.
در این مقاله یاد میگیرید که چطور با استفاده از کنسول مرورگر، منابع مشکلدار را شناسایی کنید، آنها را در وردپرس اصلاح کنید و از بازگشت دوباره این خطا جلوگیری کنید. این راهنما برای هر کسی که بهتازگی SSL را فعال کرده یا با خطای محتوای ترکیبی دستوپنجه نرم میکند، کاربردی است.
چرا خطای محتوای ترکیبی رخ میدهد؟
وقتی مرورگر شما یک صفحه HTTPS را باز میکند، تمام منابع آن صفحه باید از طریق HTTPS بارگذاری شوند تا اتصال امن حفظ شود. اگر حتی یک تصویر یا اسکریپت از آدرس HTTP استفاده کند، مرورگر آن را بهعنوان محتوای ترکیبی شناسایی میکند. این اتفاق معمولاً به یکی از دلایل زیر رخ میدهد:
- آدرس سایت در تنظیمات وردپرس (WordPress Address و Site Address) هنوز با HTTP ذخیره شده است.
- تصاویر و فایلهای رسانهای در دیتابیس با آدرسهای HTTP قدیمی ذخیره شدهاند.
- قالب یا افزونهها آدرسهای ثابت (hardcoded) با HTTP دارند.
- فایلهای CSS یا JavaScript بهصورت مستقیم از منابع خارجی با HTTP بارگذاری میشوند.
مهم است بدانید که مرورگرها با محتوای ترکیبی به دو شکل برخورد میکنند: منابع غیرفعال (مانند تصاویر) معمولاً با هشدار بارگذاری میشوند، اما منابع فعال (مانند اسکریپتها و iframeها) بهکلی مسدود میشوند. به همین دلیل، رفع این خطا برای سلامت و امنیت سایت شما حیاتی است.
گام اول: پیدا کردن منابع مشکلدار با کنسول مرورگر
قبل از هر اقدامی، باید دقیقاً بدانید کدام منابع باعث ایجاد خطای محتوای ترکیبی میشوند. بهترین ابزار برای این کار، کنسول مرورگر (Developer Tools) است. این روش در همه مرورگرهای مدرن (Chrome، Firefox، Edge) تقریباً یکسان است.
باز کردن کنسول و مشاهده خطاها
- صفحه اصلی سایت خود را در مرورگر باز کنید.
- کلید
F12را بزنید یا از منوی مرورگر گزینه Developer Tools را انتخاب کنید. - به تب Console بروید.
- در فیلتر کنسول، گزینه Errors یا Warnings را فعال کنید.
خطاهای مربوط به محتوای ترکیبی معمولاً به این شکل نمایش داده میشوند:
Mixed Content: The page at 'https://example.com' was loaded over HTTPS, but requested an insecure resource 'http://example.com/wp-content/uploads/2023/image.jpg'. This request has been blocked.
این پیام دقیقاً آدرس منبع مشکلدار را نشان میدهد. اگر چندین خطا وجود دارد، آنها را در یک فایل متنی کپی کنید تا بعداً بتوانید بهصورت دستهای اصلاحشان کنید.
بررسی تب Network برای یافتن منابع مسدودشده
گاهی اوقات کنسول همه خطاها را نشان نمیدهد. برای اطمینان کامل، به تب Network بروید و ستون Name را بررسی کنید. منابعی که با HTTP بارگذاری شدهاند، معمولاً با رنگ قرمز یا علامت هشدار نمایش داده میشوند. میتوانید از فیلتر mixed در نوار جستجوی Network استفاده کنید تا فقط منابع مشکلدار را ببینید.
گام دوم: اصلاح آدرسها در تنظیمات وردپرس
اولین و سادهترین قدم، اطمینان از درست بودن آدرس سایت در تنظیمات وردپرس است. این کار را از دو طریق میتوانید انجام دهید:
اصلاح از پیشخوان وردپرس
به مسیر پیشخوان → تنظیمات → عمومی بروید و دو فیلد زیر را بررسی کنید:
- آدرس وردپرس (WordPress Address)
- آدرس سایت (Site Address)
هر دو باید با https:// شروع شوند. اگر هنوز http:// هستند، آنها را اصلاح کنید و تغییرات را ذخیره کنید. بعد از این کار، ممکن است سایت برای چند لحظه از دسترس خارج شود؛ نگران نباشید، این طبیعی است.
اصلاح از طریق فایل wp-config.php
اگر به پیشخوان دسترسی ندارید یا میخواهید مطمئنتر عمل کنید، میتوانید این کد را به فایل wp-config.php اضافه کنید:
define('WP_HOME', 'https://example.com');
define('WP_SITEURL', 'https://example.com');
حتماً example.com را با دامنه واقعی خودتان جایگزین کنید. این روش بهخصوص در مواقعی که سایت بعد از تغییر تنظیمات از دسترس خارج شده، کاربردی است.
گام سوم: اصلاح آدرسهای ذخیرهشده در دیتابیس
تنظیمات وردپرس فقط بخشی از مشکل را حل میکند. بسیاری از تصاویر، لینکها و محتوای قدیمی در دیتابیس با آدرسهای HTTP ذخیره شدهاند. برای اصلاح این موارد، چند روش وجود دارد:
استفاده از افزونههای جستجو و جایگزینی
بهترین و امنترین راه برای اصلاح دیتابیس، استفاده از افزونههایی مانند Better Search Replace یا Velvet Blues Update URLs است. این افزونهها به شما اجازه میدهند تمام رکوردهای دیتابیس را جستجو و جایگزین کنید.
مراحل کار با افزونه Better Search Replace:
- افزونه را نصب و فعال کنید.
- به بخش Tools → Better Search Replace بروید.
- در فیلد Search for، مقدار
http://example.comرا وارد کنید. - در فیلد Replace with، مقدار
https://example.comرا وارد کنید. - همه جداول دیتابیس را انتخاب کنید.
- گزینه Dry Run را فعال کنید تا ابتدا تعداد موارد پیدا شده را ببینید.
- اگر تعداد موارد منطقی بود، Dry Run را غیرفعال کنید و عملیات را اجرا کنید.
نکته مهم: قبل از هر تغییر در دیتابیس، حتماً از سایت خود بکاپ بگیرید. این کار را میتوانید از طریق پنل مدیریت هاست یا افزونههای بکاپگیری انجام دهید.
اصلاح دستی با کوئری SQL
اگر به phpMyAdmin دسترسی دارید و با SQL آشنایی دارید، میتوانید این کوئری را اجرا کنید:
UPDATE wp_options SET option_value = REPLACE(option_value, 'http://example.com', 'https://example.com') WHERE option_name = 'home' OR option_name = 'siteurl';
UPDATE wp_posts SET post_content = REPLACE(post_content, 'http://example.com', 'https://example.com');
UPDATE wp_postmeta SET meta_value = REPLACE(meta_value, 'http://example.com', 'https://example.com');
توجه داشته باشید که پیشوند wp_ ممکن است در سایت شما متفاوت باشد. این کوئری را فقط روی جداولی اجرا کنید که محتوای متنی دارند؛ اجرای آن روی جداول غیرمرتبط میتواند به دیتابیس آسیب بزند.
گام چهارم: بررسی قالب و افزونهها
گاهی اوقات مشکل از قالب یا افزونههاست. برخی قالبها آدرسهای ثابت HTTP را در فایلهای خود دارند. برای پیدا کردن این موارد:
- به بخش نمایش → ویرایشگر قالب بروید (فقط در صورت دسترسی مدیر).
- فایلهای
header.php،footer.phpوfunctions.phpرا باز کنید. - با استفاده از جستجوی مرورگر (Ctrl+F) عبارت
http://را جستجو کنید. - هر موردی که پیدا کردید، به
https://تغییر دهید.
برای افزونهها، ابتدا همه افزونهها را غیرفعال کنید و خطا را بررسی کنید. اگر خطا برطرف شد، افزونهها را یکییکی فعال کنید تا افزونه مشکلدار را پیدا کنید. سپس یا آن را بهروزرسانی کنید یا با توسعهدهنده آن تماس بگیرید.
گام پنجم: جلوگیری از بازگشت خطا در آینده
بعد از رفع خطا، باید مطمئن شوید که مشکل دوباره برنگردد. چند راهکار پیشگیرانه وجود دارد:
استفاده از هدر HSTS
با فعالسازی HSTS (HTTP Strict Transport Security)، مرورگر را مجبور میکنید همیشه از HTTPS استفاده کند. این کار را میتوانید با افزودن کد زیر به فایل .htaccess انجام دهید:
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
</IfModule>
توجه کنید که HSTS را فقط بعد از اطمینان کامل از درستی SSL فعال کنید؛ در غیر این صورت، کاربران ممکن است برای مدت طولانی نتوانند به سایت دسترسی پیدا کنند.
استفاده از افزونههای SSL
افزونههایی مانند Really Simple SSL میتوانند بهصورت خودکار آدرسهای HTTP را به HTTPS تغییر دهند و از بارگذاری منابع ناامن جلوگیری کنند. این افزونهها برای سایتهایی که محتوای زیادی دارند، بسیار کاربردی هستند.
اشتباهات رایج در رفع محتوای ترکیبی
در فرآیند رفع این خطا، کاربران معمولاً چند اشتباه رایج را مرتکب میشوند:
- فقط تغییر تنظیمات وردپرس: این کار فقط بخشی از مشکل را حل میکند. آدرسهای ذخیرهشده در دیتابیس همچنان HTTP میمانند.
- استفاده از جستجو و جایگزینی نادرست: اگر دامنه را اشتباه وارد کنید، ممکن است به دادههای سایت آسیب بزنید. همیشه از Dry Run استفاده کنید.
- نادیده گرفتن منابع خارجی: برخی اسکریپتها و فونتها از CDNهای خارجی بارگذاری میشوند. اگر آن CDN از HTTPS پشتیبانی نمیکند، باید منبع را تغییر دهید.
- فعالسازی HSTS قبل از رفع کامل خطا: این کار میتواند دسترسی کاربران را برای مدت طولانی مسدود کند.
جمعبندی
رفع خطای محتوای ترکیبی بعد از فعالسازی SSL، فرآیندی چندمرحلهای است که نیاز به دقت و صبر دارد. با استفاده از کنسول مرورگر میتوانید منابع مشکلدار را شناسایی کنید، سپس با اصلاح تنظیمات وردپرس، دیتابیس و فایلهای قالب، مشکل را بهطور کامل برطرف کنید. مهمترین نکته این است که قبل از هر تغییر، از سایت خود بکاپ بگیرید و تغییرات را مرحلهبهمرحله اعمال کنید.
اگر بهتازگی SSL را فعال کردهاید و با این خطا مواجه شدهاید، نگران نباشید؛ این مشکل بسیار رایج است و با دنبال کردن مراحل این مقاله قابل حل است. در صورت نیاز به میزبانی امن و پایدار برای سایت وردپرسی خود، میتوانید از خدمات هاستینگ سرورنت استفاده کنید که بهصورت پیشفرض از SSL و پروتکلهای امنیتی مدرن پشتیبانی میکند.