آموزش ریدایرکت صفحات از HTTPS به HTTP در فایل .htaccess

در حالت عادی، استفاده از گواهینامه SSL و پروتکل HTTPS برای امنیت، اعتماد کاربران و سئو انتخاب بهتری است. با این حال، در بعضی سناریوها، مثل حذف موقت SSL، تست داخلی، یا جابه‌جایی سرویس، ممکن است لازم باشد آدرس‌های HTTPS را به HTTP برگردانید. در این آموزش، کدهای صحیح و به‌روز برای این کار را در Apache/.htaccess می‌بینید.

نکته مهم: اگر قبلا روی دامنه خود هدر HTTPS فعال کرده باشید، برخی مرورگرها حتی بعد از حذف SSL نیز همچنان کاربر را به نسخه HTTPS هدایت می‌کنند. قبل از هر تغییری این مورد را بررسی کنید.

نمای کلی منطق ریدایرکت از HTTPS به HTTP با پاسخ 301

 

چه زمانی این ریدایرکت منطقی است؟

  • SSL به‌صورت موقت حذف شده و باید از خطای اتصال امن جلوگیری کنید.
  • وب‌سایت در محیط داخلی یا آزمایشی اجرا می‌شود و HTTPS نیاز عملی ندارد.
  • دامنه یا زیردامنه‌ای دارید که فعلا روی HTTP سرو می‌شود و باید ورودی‌های HTTPS آن کنترل شوند.

پیشنهاد: اگر هدف شما فقط امن‌سازی یا بهبود سئو است، بهتر است به‌جای این آموزش، از مقاله‌های HTTPS و SSL چیست و نصب SSL در هاست استفاده کنید.

پیش‌نیازها قبل از اعمال کد

  • از فایل .htaccess هاست وب سایت خود یک نسخه پشتیبان بگیرید.
  • مطمئن شوید ماژول mod_rewrite در Apache فعال است.
  • اگر سایت پشت CDN یا پروکسی معکوس است، هدر X-Forwarded-Proto را هم در نظر بگیرید.
  • در وردپرس یا سایر CMSها، آدرس‌های اصلی سایت را بررسی کنید تا روی https:// قفل نشده باشند.
  • اگر فایل .htaccess را پیدا نمی‌کنید، این راهنما را ببینید:
    آموزش دسترسی به htaccess.

چک‌لیست مهم قبل از غیرفعال‌کردن HTTPS

 

کد صحیح برای ریدایرکت تمام صفحات از HTTPS به HTTP

این نسخه برای اکثر سناریوهای رایج مناسب است و علاوه بر متغیر %{HTTPS}،
وضعیت پروکسی یا CDN را نیز از طریق X-Forwarded-Proto بررسی می‌کند:

RewriteEngine On

RewriteCond %{HTTPS} =on [OR]
RewriteCond %{HTTP:X-Forwarded-Proto} https
RewriteRule ^ http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L,NE]

این کد چه کاری انجام می‌دهد؟

  • RewriteEngine On موتور بازنویسی Apache را فعال می‌کند.
  • اگر درخواست روی HTTPS باشد، شرط اول برقرار می‌شود.
  • اگر سایت پشت CDN/Proxy باشد و پروتکل اصلی از هدر مشخص شود، شرط دوم کمک می‌کند.
  • در نهایت کاربر با ریدایرکت دائم ۳۰۱ به همان مسیر در HTTP منتقل می‌شود.

کد برای ریدایرکت همه صفحات به دامنه مشخص روی HTTP

اگر بخواهید علاوه بر تغییر پروتکل، همه درخواست‌ها به یک دامنه مشخص هدایت شوند، از کد زیر استفاده کنید.
فقط به‌جای example.com دامنه واقعی خود را قرار دهید:

RewriteEngine On

RewriteCond %{HTTPS} =on [OR]
RewriteCond %{HTTP:X-Forwarded-Proto} https
RewriteRule ^ http://example.com%{REQUEST_URI} [R=301,L,NE]

توجه: در مقاله قدیمی از نمونه‌هایی استفاده شده بود که از نظر نگارشی و فنی دقیق نبودند؛
مثلا ساختارهایی مثل %{www.irpower.com} معتبر نیست و باید دامنه به‌صورت مستقیم در مقصد نوشته شود.

کد برای ریدایرکت فقط صفحه اصلی از HTTPS به HTTP

اگر می‌خواهید فقط صفحه اصلی سایت از HTTPS به HTTP منتقل شود و سایر آدرس‌ها دست‌نخورده بمانند،
از این نسخه استفاده کنید:

RewriteEngine On

RewriteCond %{HTTPS} =on [OR]
RewriteCond %{HTTP:X-Forwarded-Proto} https
RewriteRule ^$ http://example.com/ [R=301,L,NE]

در اینجا فقط ریشه سایت (/) هدف قرار گرفته است. بنابراین سایر صفحات تغییری نمی‌کنند.

خطاهای رایج بعد از اعمال ریدایرکت

مشکل دلیل احتمالی راه‌حل پیشنهادی
مرورگر هنوز HTTPS را باز می‌کند فعال‌بودن HSTS یا کش مرورگر هدر HSTS را حذف کنید و در پنجره ناشناس تست بگیرید.
ریدایرکت لوپ می‌شود وجود قانون متضاد در CDN، وردپرس یا وب‌سرور تمام قوانین ریدایرکت را در Apache، CDN و CMS یکجا بررسی کنید.
برخی منابع لود نمی‌شوند لینک‌های مطلق یا اسکریپت‌های وابسته به HTTPS آدرس فایل‌های CSS/JS/تصاویر را بازبینی و یکسان‌سازی کنید.

جمع‌بندی

برای ریدایرکت از HTTPS به HTTP بهتر است از کدهای تمیز، کوتاه و سازگار با Apache استفاده کنید و قبل از هر تغییر، وضعیت HSTS، تنظیمات CDN و آدرس‌های اصلی سایت را بررسی نمایید. اگر این تغییر برای سایت اصلی شماست، فراموش نکنید که استفاده از HTTPS در اکثر پروژه‌ها همچنان گزینه بهتر و حرفه‌ای‌تر است.

 

۳.۸/۵ - (۹ امتیاز)
جستجو

سرفصل های مقاله

نظرات کاربران
دیدگاهتان را بنویسید

لطفا علاوه بر متن نظر، نام و ایمیل خود را نیز وارد کنید. (ایمیل شما منتشر نخواهد شد)