در برخی پروژه‌های وردپرسی، به‌خصوص سایت‌هایی که روی سرورهای قدیمی یا CDNهای خاص اجرا می‌شوند، استفاده از HTTPS می‌تواند باعث بروز مشکلاتی مثل لود نشدن فایل‌ها، خطاهای Mixed Content یا ریدایرکت‌های اشتباه شود.
در چنین شرایطی، بهترین راه‌حل استفاده از یک سیستم ریدایرکت هوشمند HTTPS به HTTP است؛ نه یک ریدایرکت خام و خطرناک.کدی که در این مقاله بررسی می‌کنیم، دقیقاً برای همین هدف نوشته شده است:

اجبار کل سایت به HTTP بدون دستکاری صفحه لاگین و پنل مدیریت وردپرس.

 

مشکل ریدایرکت‌های اشتباه در وردپرس

بسیاری از کاربران برای تبدیل HTTPS به HTTP از کدهای ساده‌ای استفاده می‌کنند که:

wp-login.php را هم ریدایرکت می‌کنند , باعث آدرس‌های خراب مثل http://site.com/http://site.com/wp-login.php می‌شوند
یا لینک‌های داخلی و فایل‌های CSS و JS را به‌درستی اصلاح نمی‌کنند
نتیجه؟
❌ خطای ورود به وردپرس
❌ افت شدید سئو
❌ حلقه‌های ریدایرکت (Redirect Loop)

 

نحوه اجرا ریدایرکت https به http در وردپرس و سازگار با سئو

۱- وارد داشبورد خود شوید و به مسیر نمایش > ویرایشگر  > function.php بروید و کد زیر را اضافه و ذخیره کنید

class ForceHTTP {

    private $site_host;
    private $is_https;

    public function __construct() {
        $this->site_host = $_SERVER['HTTP_HOST'] ?? '';
        $this->is_https  = $this->check_https();

        $this->init();
    }

    private function init() {

        // ❌ هرگز لاگین و ادمین رو دستکاری نکن
        if ($this->is_login_or_admin()) {
            return;
        }

        // ریدایرکت فقط اگر HTTPS باشد
        if ($this->is_https) {
            $this->redirect_https_to_http();
        }

        // فیلتر لینک‌های وردپرس
        add_action('init', [$this, 'wordpress_hooks'], 1);

        // اصلاح خروجی HTML
        ob_start([$this, 'filter_output']);
    }

    private function is_login_or_admin() {
        $uri = $_SERVER['REQUEST_URI'] ?? '';
        return (
            strpos($uri, 'wp-login.php') !== false ||
            strpos($uri, 'wp-admin') !== false
        );
    }

    private function check_https() {

        if (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') {
            return true;
        }

        if (!empty($_SERVER['HTTP_X_FORWARDED_PROTO']) &&
            $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
            return true;
        }

        if (!empty($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) {
            return true;
        }

        return false;
    }

    private function redirect_https_to_http() {

        $request_uri = $_SERVER['REQUEST_URI'] ?? '/';

        // اگر REQUEST_URI اشتباهی URL کامل بود
        if (preg_match('#^https?://#i', $request_uri)) {
            $parsed = parse_url($request_uri);
            $request_uri = $parsed['path'] ?? '/';
            if (!empty($parsed['query'])) {
                $request_uri .= '?' . $parsed['query'];
            }
        }

        $target = 'http://' . $this->site_host . $request_uri;

        header('Location: ' . $target, true, 301);
        exit;
    }

    public function wordpress_hooks() {

        $filters = [
            'home_url',
            'site_url',
            'admin_url',
            'network_admin_url',
            'includes_url',
            'content_url',
            'plugins_url',
            'stylesheet_uri',
            'template_directory_uri',
            'script_loader_src',
            'style_loader_src'
        ];

        foreach ($filters as $filter) {
            add_filter($filter, [$this, 'force_http_url'], 9999);
        }

        add_filter('the_content', [$this, 'force_http_content'], 9999);
        add_filter('widget_text', [$this, 'force_http_content'], 9999);
        add_filter('the_excerpt', [$this, 'force_http_content'], 9999);
    }

    public function force_http_url($url) {
        if (is_string($url) && strpos($url, 'https://') === 0) {
            return 'http://' . substr($url, 8);
        }
        return $url;
    }

    public function force_http_content($content) {

        if (!is_string($content)) {
            return $content;
        }

        $host = preg_quote($this->site_host, '/');

        // https://site → http://site
        $content = preg_replace(
            '/https:\/\/' . $host . '/i',
            'http://' . $this->site_host,
            $content
        );

        // پاکسازی http:http://
        $content = preg_replace('/http:http:\/\//i', 'http://', $content);

        return $content;
    }

    public function filter_output($html) {

        if (!is_string($html) || strlen($html) < 200) {
            return $html;
        }

        $host = preg_quote($this->site_host, '/');

        // فقط لینک‌های سایت خودت
        $html = preg_replace(
            '/https:\/\/' . $host . '/i',
            'http://' . $this->site_host,
            $html
        );

        // پاکسازی دوبل‌ها
        $html = preg_replace('/http:http:\/\//i', 'http://', $html);

        return $html;
    }
}

/**
 * اجرا فقط در فرانت
 */
if (
    php_sapi_name() !== 'cli' &&
    !defined('DOING_AJAX') &&
    !defined('DOING_CRON') &&
    !defined('XMLRPC_REQUEST')
) {
    new ForceHTTP();
}

 

 

معرفی کلاس ForceHTTP

کلاس ForceHTTP یک راهکار حرفه‌ای و ایمن برای حل این مشکل است. این کلاس:

فقط در فرانت‌اند سایت اجرا می‌شود

هرگز به wp-admin و wp-login.php دست نمی‌زند

ریدایرکت را فقط زمانی انجام می‌دهد که سایت واقعاً روی HTTPS باشد

تمام لینک‌های داخلی وردپرس را به HTTP تبدیل می‌کند

خروجی HTML نهایی را هم اصلاح می‌کند

 

اگر قصد دارید امنیت سایت را افزایش دهید، استفاده از ریدایرکت خودکار http به https در وردپرس بهترین راهکار برای جلوگیری از محتوای تکراری و هدایت صحیح کاربران و موتورهای جستجو به نسخه امن سایت است.

 

ریدایرکت اصولی HTTPS به HTTP بدون آسیب به پنل مدیریت

در صورتی که سایت روی HTTPS باشد، کاربر با ریدایرکت 301 به نسخه HTTP هدایت می‌شود؛ آن هم بدون خراب شدن آدرس:

بررسی می‌کند که REQUEST_URI به‌اشتباه URL کامل نباشد
فقط مسیر و کوئری واقعی را نگه می‌دارد
از ریدایرکت‌های دوتایی جلوگیری می‌کند
این موضوع برای سئو و ایندکس گوگل بسیار مهم است.

 

اصلاح لینک‌های وردپرس (URLs & Assets)

کلاس ForceHTTP فقط به ریدایرکت بسنده نمی‌کند؛ بلکه تمام لینک‌های تولیدشده توسط وردپرس را هم اصلاح می‌کند:

home_url
site_url
plugins_url
content_url
فایل‌های CSS و JS
قالب و استایل‌ها
یعنی حتی اگر قالب یا افزونه‌ای لینک HTTPS تولید کند، خروجی نهایی همچنان HTTP خواهد بود.

 

اهمیت استفاده از https در سایت وردپرسی نه‌ تنها باعث افزایش امنیت اطلاعات کاربران می‌شود، بلکه نقش مهمی در بهبود سئو، افزایش اعتماد کاربران و رتبه بهتر سایت در نتایج گوگل دارد.

 

اصلاح خروجی HTML با Output Buffer

در مرحله آخر، کد با ob_start خروجی نهایی HTML را بررسی می‌کند و:

فقط لینک‌های مربوط به دامنه سایت را تغییر می‌دهد
لینک‌های خارجی را دست‌نخورده باقی می‌گذارد
از تغییر بی‌مورد HTMLهای کوتاه جلوگیری می‌کند
این یعنی حداکثر کنترل با حداقل ریسک.

 

مزایای استفاده از این کد جلوگیری از خطای ورود به وردپرس

حذف کامل Mixed Content
ریدایرکت 301 استاندارد و سئو فرندلی
سازگار با CDN و پراکسی
بدون نیاز به افزونه اضافی
مناسب سایت‌های فروشگاهی، شرکتی و محتوایی

 

نکات مهم قبل از استفاده

این کد فقط زمانی استفاده شود که واقعاً قصد حذف HTTPS را دارید
برای سایت‌های فروشگاهی یا دارای پرداخت آنلاین توصیه نمی‌شود
قبل از اجرا، کش و CDN را پاکسازی کنید
بهتر است در فایل functions.php قالب فرزند یا پلاگین اختصاصی قرار گیرد

 

جمع‌بندی کد php ریدایرکت https به http

اگر به‌دنبال یک راهکار ایمن، حرفه‌ای و بدون دردسر برای ریدایرکت HTTPS به HTTP در وردپرس هستید، کلاس ForceHTTP یکی از تمیزترین و اصولی‌ترین گزینه‌هاست.
این کد نه‌تنها از بروز خطاهای رایج جلوگیری می‌کند، بلکه ساختار لینک‌ها و سئوی سایت را هم حفظ می‌کند.