چرا ریدایرکت HTTPS حیاتی است؟
وقتی گواهی SSL روی سرور خود نصب میکنید، فقط نیمی از راه را رفتهاید. اگر کاربری آدرس سایت شما را با http:// وارد کند یا لینک قدیمی در موتور جستجو باقی مانده باشد، مرورگر ابتدا درخواست را روی پورت ۸۰ (HTTP) ارسال میکند. بدون ریدایرکت HTTPS، کاربر یا خطای امنیتی میبیند یا در بهترین حالت، محتوای ناامن برایش لود میشود. این موضوع علاوه بر تجربه کاربری بد، به سئو و اعتبار دامنه شما آسیب میزند.
ریدایرکت HTTPS یعنی تمام ترافیک ورودی روی پروتکل HTTP را به نسخه امن (HTTPS) هدایت کنید. این کار باید در سطح سرور انجام شود تا سریع، پایدار و بدون وابستگی به کدهای برنامه باشد. در این مقاله دو روش اصلی را بررسی میکنیم: سرورهای Apache با فایل .htaccess و سرورهای Nginx با فایل کانفیگ. همچنین رایجترین مشکل این فرآیند یعنی حلقه ریدایرکت را ریشهیابی میکنیم.
روش اول: ریدایرکت HTTPS در Apache با htaccess
اگر هاست شما از Apache استفاده میکند (بیشتر هاستهای اشتراکی)، فایل .htaccess در ریشه دایرکتوری عمومی سایت قرار دارد. اگر این فایل وجود ندارد، آن را بسازید. سپس کد زیر را در ابتدای فایل (بعد از خط RewriteEngine On اگر وجود دارد) اضافه کنید:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
این سه خط چه میکنند؟
- RewriteCond %{HTTPS} off – شرط را فقط برای درخواستهایی فعال میکند که پروتکل HTTPS ندارند.
- RewriteRule – آدرس درخواستی را گرفته و به نسخه امن با همان هاست و مسیر هدایت میکند.
- R=301 – کد وضعیت 301 (انتقال دائمی) را برمیگرداند که برای سئو ضروری است.
اگر سایت شما روی یک دامنه خاص اجرا میشود و میخواهید فقط همان دامنه را هدایت کنید، شرط را دقیقتر کنید:
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$ [NC]
RewriteRule ^(.*)$ https://example.com%{REQUEST_URI} [L,R=301]
توجه کنید که در این حالت، اگر کاربر با www وارد شود، به نسخه بدون www در HTTPS هدایت میشود. این کار به یکسانسازی دامنه کمک میکند.
نکته مهم: ترتیب قوانین در htaccess
قوانین RewriteRule به ترتیب نوشته شدن اجرا میشوند. اگر قانون دیگری در پایین فایل وجود دارد که آدرسها را بازنویسی میکند، مطمئن شوید قانون ریدایرکت HTTPS اول باشد. در غیر این صورت، ممکن است ریدایرکتهای داخلی شما را بیاثر کند یا حلقه ایجاد کند.
روش دوم: ریدایرکت HTTPS در Nginx
اگر از Nginx استفاده میکنید، فایل کانفیگ سایت معمولاً در مسیر /etc/nginx/sites-available/ قرار دارد. برای ریدایرکت، باید یک بلوک server جداگانه برای پورت ۸۰ تعریف کنید که تمام درخواستها را به پورت ۴۴۳ هدایت کند. نمونه استاندارد:
server {
listen 80;
server_name example.com www.example.com;
return 301 https://example.com$request_uri;
}
این بلوک را قبل از بلوک اصلی HTTPS قرار دهید. بلوک اصلی شما باید به این شکل باشد:
server {
listen 443 ssl http2;
server_name example.com www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
root /var/www/html;
index index.php index.html;
# بقیه تنظیمات سایت
}
دستور return 301 در Nginx بسیار کارآمدتر از rewrite است و بار کمتری روی سرور میگذارد. اگر نیاز به منطق پیچیدهتر دارید، میتوانید از rewrite استفاده کنید اما برای ریدایرکت ساده، return بهترین انتخاب است.
تست پیکربندی Nginx
بعد از اعمال تغییرات، همیشه پیکربندی را تست کنید:
sudo nginx -t
اگر خطایی نبود، سرویس را ریاستارت کنید:
sudo systemctl reload nginx
مشکل رایج: حلقه ریدایرکت (Redirect Loop)
یکی از آزاردهندهترین خطاها وقتی رخ میدهد که مرورگر پیام «این صفحه در حال تغییر مسیرهای زیاد است» یا ERR_TOO_MANY_REDIRECTS نشان میدهد. این مشکل معمولاً به یکی از دلایل زیر ایجاد میشود:
۱. ریدایرکت دوباره در کد برنامه
اگر سایت شما با وردپرس، لاراول یا هر فریمورک دیگری ساخته شده و در کد آن هم ریدایرکت به HTTPS وجود دارد، ممکن است دو ریدایرکت پشت سر هم اجرا شوند و حلقه بسازند. راهحل: فقط یک لایه ریدایرکت داشته باشید. اگر ریدایرکت در سرور انجام میشود، کد برنامه را بررسی کنید و ریدایرکت اضافی را حذف کنید.
۲. تنظیمات ناقص در وردپرس
در وردپرس، اگر آدرس سایت در تنظیمات (General Settings) هنوز http:// باشد، حلقه ریدایرکت ایجاد میشود. به پیشخوان بروید و هر دو فیلد «آدرس وردپرس» و «آدرس سایت» را با https:// شروع کنید. اگر به پیشخوان دسترسی ندارید، در فایل wp-config.php این خطوط را اضافه کنید:
define('WP_HOME', 'https://example.com');
define('WP_SITEURL', 'https://example.com');
۳. ریدایرکتهای زنجیرهای در CDN یا پروکسی
اگر از Cloudflare یا سرویس مشابه استفاده میکنید، مطمئن شوید حالت SSL در پنل CDN روی «Full» یا «Full (strict)» تنظیم شده باشد. حالت «Flexible» باعث میشود CDN با سرور شما از طریق HTTP ارتباط برقرار کند و اگر سرور هم ریدایرکت به HTTPS بدهد، حلقه ایجاد میشود.
۴. قانون اشتباه در htaccess
برخی کدهای قدیمی از RewriteCond %{SERVER_PORT} !^443$ استفاده میکنند. اگر سرور شما پشت یک پروکسی یا لود بالانسر باشد، این شرط ممکن است همیشه درست باشد و حلقه بسازد. روش مطمئنتر استفاده از %{HTTPS} off است که در بیشتر محیطها کار میکند.
ابزارهای بررسی و عیبیابی
بعد از اعمال ریدایرکت، حتماً نتیجه را بررسی کنید. چند روش ساده:
- در مرورگر، آدرس
http://example.comرا وارد کنید و ببینید آیا بهhttps://example.comهدایت میشوید یا خیر. - از ابزار آنلاین مثل Redirect Checker استفاده کنید تا زنجیره ریدایرکت را ببینید. اگر بیش از یک ریدایرکت ۳۰۱ پشت سر هم باشد، یعنی جای بهینهسازی وجود دارد.
- با دستور
curlدر ترمینال، هدرهای HTTP را بررسی کنید:
curl -I http://example.com
خروجی باید شامل خط HTTP/1.1 301 Moved Permanently و هدر Location: https://example.com/ باشد.
نکات تکمیلی برای انتقال روان
بهروزرسانی لینکهای داخلی
ریدایرکت سرور فقط ترافیک ورودی را مدیریت میکند. اما لینکهای داخلی سایت شما که هنوز با http:// نوشته شدهاند، باعث درخواستهای اضافی و کندی میشوند. در پایگاه داده یا قالب سایت، همه لینکها را به https:// تغییر دهید. در وردپرس میتوانید از افزونههایی مثل «Better Search Replace» استفاده کنید.
ثبت دامنه در Google Search Console
بعد از انتقال، نسخه HTTPS سایت را به عنوان یک «پراپرتی» جدید در Search Console اضافه کنید و درخواست ایندکس مجدد بدهید. این کار به گوگل کمک میکند سریعتر متوجه تغییر شود.
فعالسازی HSTS
اگر میخواهید مرورگرها همیشه به صورت خودکار از HTTPS استفاده کنند، هدر HSTS را فعال کنید. در Nginx:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
در Apache، این خط را به فایل کانفیگ یا htaccess اضافه کنید:
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
فقط توجه کنید که HSTS را زمانی فعال کنید که مطمئن هستید همه زیردامنهها هم HTTPS دارند؛ در غیر این صورت کاربران دیگر به نسخه HTTP زیردامنهها دسترسی نخواهند داشت.
جمعبندی
ریدایرکت HTTPS یک اقدام ضروری برای هر سایتی است که گواهی SSL نصب کرده است. با دو روش سادهای که در این مقاله توضیح داده شد، میتوانید تمام ترافیک HTTP را به نسخه امن هدایت کنید. مهمترین نکته این است که بعد از اعمال تغییرات، حتماً تست کنید و اگر با حلقه ریدایرکت مواجه شدید، ابتدا تنظیمات وردپرس، سپس CDN و در نهایت قوانین سرور را بررسی کنید.
اگر در راهاندازی SSL یا انتقال سایت خود به HTTPS نیاز به کمک دارید، تیم پشتیبانی سرورنت میتواند در انتخاب و پیکربندی سرویس مناسب شما را راهنمایی کند. اما به یاد داشته باشید که ریدایرکت، صرفنظر از نوع هاست، یک کار فنی است که با دانش این مقاله میتوانید خودتان انجام دهید.
دیدگاهها ۰
هنوز دیدگاهی ثبت نشده؛ اولین نفر باشید!