آموزش ریدایرکت HTTP به HTTPS؛ از سی پنل تا وردپرس و htaccess

آموزش ریدایرکت HTTP به HTTPS

اگر نسخۀ HTTP سایت‌تان همچنان در دسترس باشد، ممکن است بعضی کاربران از همان آدرس قدیمی وارد شوند، حتی باوجود اینکه نسخۀ HTTPS را فعال کرده‌ باشید! با ریدایرکت HTTP به HTTPS، این درخواست‌ها به نشانیِ امن همان صفحه منتقل می‌شوند.

در ادامۀ این مطلب از وبلاگ VPSmarket، ابتدا پیش‌نیاز این کار را بررسی می‌کنیم و بعد سراغ تنظیم ریدایرکت در cPanel، فایل ‎.htaccess‎ و وردپرس می‌رویم و روش تست و رفع خطاهای احتمالی آن را هم توضیح می‌دهیم. تا انتهای این مطلب با ما همراه باشید.

ریدایرکت HTTP به HTTPS چیست؟

HTTP و HTTPS هر دو برای ارتباط مرورگر با وب‌سرور به کار می‌روند، اما HTTPS با استفاده از TLS از اطلاعات در حال انتقال محافظت می‌کند. ریدایرکت به این معنی است که سرور، درخواستِ آدرس HTTP را دریافت کند و مرورگر را به نسخۀ HTTPS آن بفرستد؛ آن هم بدون اینکه کاربر مجبور باشد نشانی را خودش تغییر دهد.

برای نمونه، وقتی کسی آدرس اول را باز می‌کند، باید به آدرس دوم برسد:

http://example.com

↓

https://example.com

همین قاعده برای صفحه‌های داخلی هم برقرار است. در ریدایرکت کردن صفحات از HTTP به HTTPS، فقط پروتکل عوض می‌شود و مسیر صفحه باید حفظ شود:

http://example.com/blog/article

↓

https://example.com/blog/article

به این ترتیب، کسی که از یک لینک قدیمی وارد سایت شده است، به‌جای صفحۀ اصلی یا آدرسی نامرتبط، همان محتوایی را می‌بیند که دنبالش بوده است.

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

پیش‌نیاز ریدایرکت HTTP به HTTPS

قبل از تبدیل http به https، باید گواهی SSL دامنه فعال باشد و سایت با آدرس HTTPS بدون خطای گواهی باز شود. اگر ریدایرکت را زودتر فعال کنید، بازدیدکننده به نسخه‌ای هدایت می‌شود که ممکن است اتصال به آن با خطا همراه باشد.

برای اطمینان، آدرس ‎https://‎example.com را با دامنۀ خودتان در مرورگر باز کنید. وقتی نسخۀ HTTPS درست بارگذاری شد، می‌توانید یکی از روش‌های زیر را برای هدایت درخواست‌های HTTP انتخاب کنید.

آموزش ریدایرکت HTTP به HTTPS در cPanel

اگر هاست شما cPanel دارد، معمولاً ساده‌ترین راه استفاده از گزینۀ Force HTTPS Redirect است. این گزینه در بخش Domains قرار دارد و بدون نیاز به تغییر دستی فایل ‎.htaccess‎، درخواست‌های HTTP دامنه را به HTTPS می‌فرستد؛ به شرط آنکه گواهی SSL معتبر باشد.

مراحل فعال‌سازی HTTPS در cPanel

برای فعال‌کردن ریدایرکت http به https در سی پنل، این مراحل را به‌ترتیب انجام دهید:

  1. وارد حساب cPanel هاست شوید.
  2. از صفحۀ اصلی به بخش Domains بروید.
  3. دامنه‌ای را که می‌خواهید برای آن ریدایرکت تنظیم کنید، پیدا کنید.
  4. گزینۀ Force HTTPS Redirect همان دامنه را روی On قرار دهید.
  5. سایت را با نشانی HTTP باز کنید و ببینید آیا به HTTPS منتقل می‌شوید یا نه.

برای نمونه، بازکردن نشانی اول باید شما را به نشانی دوم ببرد:

http://example.com

↓

https://example.com

اگر این گزینه را در فهرست نمی‌بینید، وضعیت گواهی SSL و تنظیمات ارائه‌دهندۀ هاست را بررسی کنید. در cPanel، کلید Force HTTPS Redirect برای Aliasها نمایش داده نمی‌شود.

گزینۀ Force HTTPS Redirect در بخش Domains سی پنل

آموزش ریدایرکت لینک‌ های سایت از http به https از طریق فایل htaccess‎

اگر می‌خواهید قوانین ریدایرکت را خودتان تنظیم کنید، می‌توانید از فایل ‎.htaccess‎ استفاده کنید. این روش بیشتر در هاست‌های مبتنی بر Apache کاربرد دارد و LiteSpeed Web Server هم از بسیاری از قوانین بازنویسی سازگار با Apache پشتیبانی می‌کند. اگر برای میزبانی سایت به منابع و کنترل بیشتری روی تنظیمات سرور نیاز دارید، سرور مجازی نیز می‌تواند گزینۀ مناسبی باشد.

پیش از ویرایش فایل ‎.htaccess‎ در ریشۀ سایت، از آن نسخۀ پشتیبان بگیرید. سپس برای ریدایرکت دائمی HTTP به HTTPS این سه خط را به فایل اضافه کنید:

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

خط اول موتور Rewrite را فعال می‌کند. خط دوم مشخص می‌کند که قانون برای درخواست‌های غیر HTTPS اجرا شود و خط سوم با کد ۳۰۱ آن‌ها را به نسخۀ امن می‌فرستد. متغیر %{REQUEST_URI} نیز مسیر صفحه را حفظ می‌کند. بنابراین نتیجه برای یک صفحه داخلی چنین است:

http://example.com/products/phone

↓

https://example.com/products/phone

هر دستور را در خط جداگانه بنویسید؛ به این دلیل که قرارگرفتن چند دستور در یک خط ممکن است خطای Syntax و در نتیجه خطای ۵۰۰ سرور ایجاد کند. اگر فایل از قبل قوانین دیگری دارد، آن‌ها را پاک نکنید و پیش از ذخیره، ترتیب دستورها را بررسی کنید.

قانون ریدایرکت را کجای ‎.htaccess‎ قرار دهیم؟

در سایت‌های وردپرسی، معمولاً محل مناسب برای این قانون، بالای بخش # BEGIN WordPress است؛ یعنی بیرون از محدوده‌ای که به # END WordPress ختم می‌شود. دلیلش این است که وردپرس ممکن است محتوای داخل این محدوده را هنگام بازنویسی تنظیمات تغییر دهد.

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

# BEGIN WordPress
...
# END WordPress

این نمونه زمانی مناسب است که قانون دیگری با آن تداخل نداشته باشد. اگر ابتدای فایل از قبل دستورهای بازنویسی دارد، قانون جدید را با توجه به همان ترتیب اضافه کنید و نسخۀ پشتیبان را نگه دارید.

3 روش ریدایرکت http به https

چرا پشت CDN گاهی حلقۀ ریدایرکت ایجاد می‌شود؟

در سایت‌هایی که از CDN یا Reverse Proxy استفاده می‌کنند، ممکن است مرورگر با HTTPS به سرویس واسط وصل شود، اما درخواست از آنجا با HTTP به سرور مبدأ برسد. در این حالت سرور مقدار %{HTTPS} را off می‌بیند و دوباره درخواست انتقال به HTTPS می‌دهد. اگر ارتباط واسط با سرور همچنان HTTP بماند، این رفت‌وبرگشت تکرار می‌شود و به Redirect Loop می‌رسد.

برخی CDNها پروتکل درخواست اصلی کاربر را از طریق هدر X-Forwarded-Proto اعلام می‌کنند. اگر این هدر در ساختار سایت شما به‌درستی و از منبع مورداعتماد ارسال می‌شود، قانون ریدایرکت را می‌توان به شکل زیر تنظیم کرد:

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

با این شرط اضافی، وقتی کاربر از HTTPS وارد شده و مقدار هدر X-Forwarded-Proto برابر https باشد، ریدایرکت دیگری انجام نمی‌شود. بااین‌حال، نباید به هدری که مستقیماً از کاربر دریافت می‌شود اعتماد کرد؛ پیش از استفاده از این قانون، تنظیمات Proxy و مستندات CDN خود را بررسی کنید.

تبدیل HTTP به HTTPS در وردپرس

در سایت وردپرسی، ریدایرکتِ سمت هاست فقط بخشی از کار است. نشانی‌هایی که وردپرس برای سایت ذخیره کرده نیز باید با HTTPS شروع شوند، وگرنه ممکن است همچنان آدرس‌های HTTP در بخش‌هایی از سایت استفاده شوند. این نشانی‌ها در تنظیمات عمومی با عنوان‌های WordPress Address و Site Address دیده می‌شوند و به‌ترتیب با مقادیر siteurl و home ارتباط دارند.

پس از آنکه از درست‌بودن گواهی SSL مطمئن شدید، مراحل زیر را دنبال کنید:

  1. از پیشخوان وردپرس، «تنظیمات ← عمومی» (Settings > General) را باز کنید.
  2. در «نشانی وردپرس» (WordPress Address)، آدرس محل نصب فایل‌های اصلی وردپرس را ببینید.
  3. در «نشانی سایت» (Site Address)، آدرسی را که کاربران با آن وارد سایت می‌شوند بررسی کنید.
  4. در صورت نیاز، ‎http://‎ را در آدرس‌ها به ‎https://‎ تغییر دهید و تنظیمات را ذخیره کنید. انتهای نشانی‌ها اسلش نگذارید.

دو نشانی اصلی سایت در تنظیمات عمومی وردپرس

اگر SSL هنوز نصب نشده یا نسخه HTTPS خطا دارد، این تغییر را انجام ندهید؛ ممکن است دسترسی به سایت یا پیشخوان قطع شود. در چنین شرایطی، ابتدا مراحل نصب SSL در وردپرس را کامل کنید. اگر پس از تغییر نشانی‌ها دیگر به پیشخوان دسترسی نداشتید، می‌توانید موقتاً آدرس‌های اصلی را در فایل ‎wp-config.php‎ مشخص کنید:

define( 'WP_HOME', 'https://example.com' );
define( 'WP_SITEURL', 'https://example.com' );

به‌جای example.com، دامنه خودتان را قرار دهید. این دو مقدار نشانی سایت و محل نصب وردپرس را مشخص می‌کنند؛ البته خودِ تغییر این آدرس‌ها جایگزین ریدایرکت در وب‌سرور یا تنظیمات هاست نیست.

آدرس‌های قدیمی HTTP و خطای Mixed Content

بعد از اصلاح نشانی‌های وردپرس، هنوز ممکن است آدرس بعضی تصاویر یا فایل‌ها در محتوای نوشته‌ها، قالب، افزونه‌ها و دیتابیس با HTTP ذخیره شده باشد. در نتیجه، صفحه با HTTPS باز می‌شود، اما مرورگر برای بارگذاری تصویر، CSS یا JavaScript به آدرس HTTP مراجعه می‌کند. این وضعیت به Mixed Content معروف است و ممکن است باعث مسدودشدن برخی فایل‌ها شود.

بنابراین هنگام تبدیل http به https در وردپرس، آدرس‌های قدیمی را هم بررسی و در صورت نیاز اصلاح کنید. اگر قرار است تغییر گسترده‌ای با Search & Replace در دیتابیس انجام دهید، پیش از شروع حتماً نسخۀ پشتیبان بگیرید.

ریدایرکت ۳۰۱ یا ۳۰۲؛ کدام را انتخاب کنیم؟

تا اینجا روش‌های انتقال را دیدیم، اما نوع ریدایرکت هم مهم است. وقتی قرار است نسخۀ HTTP برای همیشه به HTTPS منتقل شود، کد ۳۰۱ انتخاب مناسب‌تری است، چون به مرورگر و موتور جست‌وجو اعلام می‌کند آدرس به‌طور دائمی تغییر کرده است. کد ۳۰۲ برای انتقال موقت به کار می‌رود و برای این جابه‌جایی دائمی انتخاب اصلی نیست.

بعد از ریدایرکت چه چیزهایی را بررسی کنیم؟

فعال‌شدن ریدایرکت به این معنی نیست که تمام آدرس‌ها بدون مشکل منتقل شده‌اند. برای این منظور، بهتر است چند صفحۀ داخلی را هم امتحان کنید و این موارد را یک‌به‌یک بررسی کنید:

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

تست ریدایرکت با curl

برای اینکه فقط به نتیجه ظاهری مرورگر تکیه نکنید، می‌توانید پاسخ سرور را با curl بررسی کنید. دستور زیر هدرهای پاسخ آدرس HTTP را نمایش می‌دهد:

curl -I http://example.com

اگر برای این آدرس ریدایرکت دائمی ۳۰۱ تنظیم شده باشد، باید کد وضعیت و هدر Location را در خروجی ببینید؛ مثلاً:

HTTP/1.1 301 Moved Permanently
Location: https://example.com/

عدد ۳۰۱ نوع انتقال را مشخص می‌کند و مقدار Location نشانی مقصد را نشان می‌دهد. اگر نتیجه چیز دیگری بود، به‌ویژه اگر چند ریدایرکت پشت‌سرهم یا خطای ۵۰۰ دیدید، تنظیمات ریدایرکت را دوباره بررسی کنید.

خطاهای رایج هنگام ریدایرکت HTTP به HTTPS

اگر پس از انجام مراحل بالا سایت درست باز نمی‌شود، ابتدا دو مورد را بررسی کنید: اول آماده‌نبودن گواهی SSL و دوم تداخل قوانین ریدایرکت. برای مثال، ممکن است افزونۀ وردپرس و فایل ‎.htaccess‎ هم‌زمان دستورهای متفاوتی اجرا کنند یا تنظیمات CDN درخواست را بین HTTP و HTTPS در رفت‌وبرگشت نگه دارد.

وقتی مرورگر مدام بین دو نشانی جابه‌جا می‌شود، قوانین ‎.htaccess‎، تنظیمات وردپرس و پیکربندی SSL ،CDN یا Proxy را کنار هم بررسی کنید. البته کش مرورگر را هم در نظر بگیرید؛ چون گاهی ریدایرکت‌های قبلی در آن ذخیره شده‌اند و این عامل باعث تغییر نتیجۀ آزمایش می‌شود.

آیا ریدایرکت HTTP به HTTPS برای سئو لازم است؟

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

پس از تنظیم ریدایرکت، لینک‌های داخلی، آدرس تصاویر، تگ‌های Canonical و تنظیمات ابزارهای تحلیل و سرچ کنسول را هم مرور کنید. بهتر است این بخش‌ها نیز به نشانی‌های HTTPS اشاره کنند تا نسخه‌های قدیمی در قسمت‌های مختلف سایت باقی نمانند.

جمع‌بندی

برای انتقال درست سایت از HTTP به HTTPS، اول مطمئن شوید گواهی SSL فعال است. بعد با یکی از روش‌های cPanel یا فایل ‎.htaccess‎ ریدایرکت ۳۰۱ را تنظیم کنید و اگر سایت‌تان وردپرسی است، نشانی‌های اصلی و فایل‌های قدیمی HTTP را نیز اصلاح کنید. زمانی کار شما تمام می‌شود که آدرس‌های داخلی را آزمایش کرده باشید و خطایی مانند Mixed Content یا حلقۀ ریدایرکت باقی نمانده باشد.

اگر سایت پشت CDN یا Proxy قرار دارد، ارتباط آن با سرور مبدأ را هم بررسی کنید. چون بعضی مواقع ریشۀ مشکل در همین بخش است. برای آشنایی با نقش این سرویس‌ها، مقالۀ  کلودفلر چیست را بخوانید.

در پایان، چند لینک قدیمی را در مرورگر یا با دستور curl -I تست کنید. دقت داشته باشید که مقصد هر کدام باید نسخۀ HTTPS همان صفحه باشد، آن هم بدون خطای اتصال و انتقال‌های اضافی.

 

سؤالات متداول

ریدایرکت HTTP به HTTPS چیست؟

یعنی بازدیدکننده‌ای که نشانی ‎http://‎ یک صفحه را باز می‌کند، به آدرس ‎https://‎ همان صفحه منتقل شود. برای انتقال دائمی معمولاً از ریدایرکت ۳۰۱ استفاده می‌شود.

آیا قبل از ریدایرکت باید SSL نصب شود؟

بله. قبل از هر تغییری باید سایت با HTTPS و گواهی معتبر بدون خطا باز شود. گزینۀ Force HTTPS Redirect در cPanel هم به فعال‌بودن گواهی معتبر وابسته است.

چطور ریدایرکت HTTP به HTTPS را در سی پنل فعال کنیم؟

در cPanel وارد بخش Domains شوید، دامنه را پیدا کنید و Force HTTPS Redirect را روی On بگذارید. اگر این گزینه نمایش داده نمی‌شود، SSL و تنظیمات ارائه‌دهنده هاست را بررسی کنید.

آیا تغییر آدرس سایت در وردپرس کافی است؟

خیر. تغییر WordPress Address و Site Address نشانی‌های اصلی وردپرس را اصلاح می‌کند، اما برای انتقال خودکار بازدیدکنندگان HTTP، ریدایرکت باید در هاست یا وب‌سرور هم درست تنظیم شده باشد.

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

سه × 5 =