این خطا یعنی دو قانون همدیگر را خنثی می‌کنند: یکی بازدیدکننده را از الف به ب می‌فرستد و دیگری از ب به الف، و مرورگر بعد از حدود بیست بار دست می‌کشد. تقریباً همیشه پای https یا www در میان است، و دو قانون در دو جای مختلف نوشته شده‌اند: htaccess، تنظیمات وردپرس، سی‌پنل یا کلودفلر. کار شما پیدا کردن این دو جا و نگه داشتن فقط یکی است.

اول مطمئن شوید مشکل از سایت است

  • در پنجره‌ی ناشناس یا مرورگر دیگری امتحان کنید. اگر باز شد، کوکی‌های سایت را در مرورگر اصلی پاک کنید.
  • با ابزارهای بررسی ریدایرکت آنلاین، آدرس را بدهید؛ زنجیره‌ی پرش‌ها را نشان می‌دهند و معلوم می‌شود بین کدام دو آدرس می‌چرخد.

الگوی چرخش، علت را می‌گوید

بین این دو می‌چرخد علت محتمل
http و https کلودفلر روی حالت Flexible، یا دو قانون اجبار HTTPS
www و بدون www آدرس سایت در وردپرس یک شکل است و قانون htaccess شکل دیگر
صفحه‌ی ورود و پیشخوان کوکی، افزونه‌ی امنیتی، یا آدرس سایت اشتباه
یک آدرس و خودش قانون ریدایرکت اشتباه در htaccess یا بخش Redirects سی‌پنل

۱. کلودفلر روی Flexible

رایج‌ترین علت. در حالت Flexible، کلودفلر با بازدیدکننده https حرف می‌زند ولی با هاست شما http. هاست می‌بیند درخواست http آمده و آن را به https می‌فرستد؛ کلودفلر دوباره با http می‌آید، و همین‌طور تا بی‌نهایت. راه رفع: در کلودفلر، بخش SSL/TLS، حالت را روی Full (strict) بگذارید. شرطش این است که هاست گواهی SSL معتبر داشته باشد. (SSL رایگان در سی‌پنل)

۲. آدرس سایت در وردپرس

وردپرس خودش به آدرسی که در تنظیمات دارد ریدایرکت می‌کند. اگر آن‌جا http://www نوشته باشد و htaccess به https:// بدون www بفرستد، حلقه ساخته می‌شود. چون پیشخوان باز نمی‌شود، از یکی از این دو راه اصلاح کنید:

  • در فایل wp-config.php این دو خط را بالای خط «That’s all» اضافه کنید:
    define('WP_HOME', 'https://example.com');
    define('WP_SITEURL', 'https://example.com');
  • یا در phpMyAdmin، جدول wp_options، دو ردیف siteurl و home را ویرایش کنید. (ویرایش یک رکورد در phpMyAdmin)

۳. دو قانون اجبار HTTPS

اجبار HTTPS را می‌شود در چهار جا روشن کرد: کلید Force HTTPS Redirect در بخش Domains سی‌پنل، قانون دستی در htaccess، افزونه‌ی SSL وردپرس، و کلودفلر. یکی کافی است. اگر چندتا با شرط‌های متفاوت فعال باشند، بعضی ترکیب‌ها حلقه می‌سازند. ساده‌ترین انتخاب، کلید سی‌پنل است؛ بقیه را خاموش کنید.

فهرست دامنه‌ها در سی‌پنل با ستون Document Root و Force HTTPS Redirect
ستون Force HTTPS Redirect در بخش Domains سی‌پنل

۴. htaccess

  1. در File Manager نمایش فایل‌های مخفی را روشن کنید. (نمایش فایل‌های مخفی)
  2. فایل .htaccess پوشه‌ی سایت را به .htaccess-old تغییر نام دهید.
  3. سایت را باز کنید. اگر خطا رفت، مقصر همان فایل بود.
  4. در وردپرس، تنظیمات، پیوندهای یکتا، ذخیره را بزنید تا فایل تازه و تمیز ساخته شود. قانون‌های لازم را یکی‌یکی برگردانید و بعد از هرکدام تست کنید.

قانون درستِ اجبار HTTPS که پشت پراکسی هم حلقه نمی‌سازد در مقاله‌ی دستورهای پرکاربرد htaccess آمده.

۵. بخش Redirects سی‌پنل

اگر قبلاً از ابزار Redirects ریدایرکتی ساخته‌اید که مبدأ و مقصدش به هم می‌رسند (مثلاً دامنه به خودش با www)، همان‌جا حذفش کنید. (ریدایرکت در سی‌پنل)

۶. افزونه‌ها

افزونه‌های ریدایرکت، امنیتی، چندزبانه و کش هرکدام می‌توانند قانون خودشان را اضافه کنند. اگر تا این‌جا پیدا نشد، پوشه‌ی wp-content/plugins را در File Manager موقتاً تغییر نام دهید. اگر سایت باز شد، نام را برگردانید و افزونه‌ها را یکی‌یکی فعال کنید.

بعد از رفع

  • کش سایت، کش کلودفلر و کوکی‌های مرورگر را پاک کنید؛ ریدایرکت ۳۰۱ در مرورگر کش می‌شود و ممکن است خطا را هنوز نشان دهد.
  • چهار شکل آدرس را تست کنید: با و بدون www، با http و https. همه باید به یک آدرس برسند. (www یا بدون www)

سوال‌های رایج

فقط صفحه‌ی ورود وردپرس حلقه می‌زند.

کوکی‌ها را پاک کنید. اگر نشد، آدرس سایت را با روش wp-config ثابت کنید و افزونه‌ی امنیتی را موقتاً غیرفعال کنید.

بعد از فعال کردن SSL شروع شد.

تقریباً همیشه مورد ۱ یا ۳ است.

بعد از انتقال هاست شروع شد.

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