---
title: "حل خطای ⁦err_too_many_redirects⁩ (تغییر مسیر بیش از حد)"
description: "خطای err_too_many_redirects یعنی سایت مرورگر شما را در یک حلقه میان نشانی‌ها چرخانده تا مرورگر دست کشیده است. راه‌حل برای بازدیدکننده، صاحب سایت و کد اسکرپر."
url: https://proxynet.io/fa/blog/err-too-many-redirects
date: 2026-10-05
author: "Acar Diveroli"
category: "آموزش‌ها"
lang: fa
---

# حل خطای ⁦err_too_many_redirects⁩ (تغییر مسیر بیش از حد)

روی پیوند یک فروشگاه یا یک صفحه ورود کلیک می‌کنید. زبانه لحظه‌ای می‌چرخد و سپس گوگل کروم عنوان «این صفحه کار نمی‌کند» (در رابط انگلیسی ⁦"This page isn't working"⁩)، سطری که می‌گوید سایت شما را بیش از حد به نشانی‌های دیگر هدایت کرده است و در پایین صفحه `ERR_TOO_MANY_REDIRECTS` را نشان می‌دهد. فایرفاکس می‌نویسد «تغییرمسیرهای صفحه دارای حلقه تکرار است» و سافاری می‌گوید تغییر مسیرهای بیش از حدی رخ داده است.

اتفاق زیان‌باری نیفتاده است. سایت مرورگر شما را پیوسته از یک نشانی به نشانی دیگر فرستاده تا جایی که مرورگر دیگر دنبالش نکرده است. در ادامه می‌خوانید حلقه تغییر مسیر چیست، بازدیدکننده چه راه‌حل‌هایی دارد، اگر سایت مال شماست چه چیزی را باید تغییر دهید (Cloudflare، قاعده‌های HTTPS و www، وردپرس)، یک فرمان که زنجیره را نشان می‌دهد و همین خطا درون یک اسکرپر.

> **نکته: پاسخ کوتاه**
>
> `ERR_TOO_MANY_REDIRECTS` یعنی سایت مرورگر شما را دور یک دایره چرخانده است، مثلاً از صفحه A به صفحه B و دوباره به A، و مرورگر پس از 20 پرش دست کشیده است. اگر بازدیدکننده هستید، کوکی‌های همان یک سایت را حذف کنید، یک پنجره ناشناس را امتحان کنید، افزونه‌ها و هر VPN روشنی را خاموش کنید و ساعت دستگاه را بررسی کنید. اگر صفحه در همه دستگاه‌ها و شبکه‌ها باز نمی‌شود، پیکربندی سایت ایراد دارد و فقط صاحب آن می‌تواند درستش کند. صاحبان سایت معمولاً به دو قاعده می‌رسند که با هم درگیرند: حالت SSL از نوع Flexible در Cloudflare در برابر سروری که HTTPS را اجباری می‌کند، دو قاعده جداگانه برای www، یا نشانی نادرست در تنظیمات وردپرس.

## خطای ERR_TOO_MANY_REDIRECTS یعنی چه؟

تغییر مسیر (ریدایرکت) پاسخ کوتاهی از سرور است که می‌گوید «این صفحه جای دیگری است، به آنجا بروید» و مرورگر بی‌آنکه از شما بپرسد آن را دنبال می‌کند. سایت‌ها همیشه از آن استفاده می‌کنند: از `http://` به `https://`، از صفحه‌ای قدیمی به صفحه‌ای تازه، از صفحه‌ای ویژه اعضا به فرم ورود و برگشت.

حلقه تغییر مسیر راهی است که هرگز تمام نمی‌شود: صفحه A شما را به B می‌فرستد و B دوباره به A. [بخش 15.4 از ⁦RFC 9110⁩](https://www.rfc-editor.org/rfc/rfc9110.html#name-redirection-3xx) از برنامه‌های کلاینت مانند مرورگر می‌خواهد تغییر مسیرهای چرخه‌ای را «تشخیص دهند و در آن‌ها مداخله کنند»، و [استاندارد Fetch](https://fetch.spec.whatwg.org/#http-redirect-fetch) که مرورگرها پیاده‌سازی می‌کنند، پس از 20 تغییر مسیر درخواست را با خطای شبکه پایان می‌دهد. کروم و فایرفاکس هر دو همان‌جا می‌ایستند.

## این خطا در هر مرورگر چگونه دیده می‌شود؟

متن‌های کروم و فایرفاکس از [فایل‌های متنی](https://github.com/chromium/chromium/blob/main/components/error_page_strings.grdp) خود مرورگرها و ترجمه‌های فارسی کنونی آن‌ها آمده است. مایکروسافت اج، اپرا و بریو بر موتور کروم (کرومیوم) ساخته شده‌اند و همین کد را نشان می‌دهند.

| مرورگر | آنچه روی صفحه نوشته شده | کد |
|---|---|---|
| کروم | «این صفحه کار نمی‌کند»، «تعداد دفعاتی که ⁦example.com⁩ شما را به نشانی‌های دیگر هدایت کرده بیش از حد است.» و پیوند «حذف کوکی‌ها را امتحان کنید» | `ERR_TOO_MANY_REDIRECTS` |
| فایرفاکس | «تغییرمسیرهای صفحه دارای حلقه تکرار است» و یادداشتی که می‌گوید نپذیرفتن کوکی‌ها می‌تواند علت آن باشد | ندارد |
| سافاری (مک، آیفون) | سافاری نمی‌تواند صفحه را باز کند، چون تغییر مسیرهای بیش از حدی رخ داده است | ندارد |

صفحه بایگانی‌شده [راهنمای اپل برای پیام سافاری](https://support.apple.com/en-us/HT203370) همین حلقه را توصیف می‌کند. هر سه مرورگر نخست به کوکی‌ها اشاره می‌کنند.

## حلقه تغییر مسیر گام‌به‌گام چگونه پدید می‌آید؟

صفحه‌ای ویژه اعضا را در نظر بگیرید:

1. نشانی `https://example.com/account` را باز می‌کنید.
2. سرور دنبال کوکی ورود خود می‌گردد؛ کوکی تکه متن کوچکی است که سایت پیش‌تر در مرورگر شما ذخیره کرده است. چیزی پیدا نمی‌کند و شما را به `/login` می‌فرستد.
3. صفحه ورود می‌بیند که در سمت خودش وارد شده‌اید، کوکی تازه‌ای می‌گذارد و شما را برمی‌گرداند.
4. اگر مرورگر آن کوکی را نگه ندارد یا نفرستد (مسدود شده، از پیش منقضی شده یا برای نشانی دیگری تنظیم شده است)، گام 2 تکرار می‌شود.
5. پس از 20 دور، مرورگر می‌ایستد و خطا را نشان می‌دهد.

خانواده دیگر به کوکی نیازی ندارد: دو قاعده که با هم موافق نیستند. یک لایه `https://` را اجباری می‌کند و لایه‌ای دیگر بازدیدکننده را به `http://` برمی‌گرداند؛ یا یک قاعده `www.` را اضافه می‌کند و قاعده‌ای دیگر آن را برمی‌دارد.

## علت آن چیست و مشکل از سمت کیست؟

| علت | سمت چه کسی | نشانه معمول | نخستین گام |
|---|---|---|---|
| کوکی کهنه، خراب یا مسدودشده | سمت شما | یک سایت، یک مرورگر | کوکی‌های آن سایت را حذف کنید یا اجازه دهید |
| افزونه‌ای که نشانی‌ها را بازنویسی می‌کند | سمت شما | در پنجره ناشناس باز می‌شود | افزونه‌ها را خاموش کنید |
| ساعت دستگاه که خیلی جلو یا عقب است | سمت شما | حلقه هنگام ورود به حساب | زمان را خودکار تنظیم کنید |
| VPN یا پروکسی‌ای که کشور دیگری را نشان می‌دهد | سمت شما و سمت سایت | فقط وقتی VPN روشن است | آن را خاموش کنید |
| تغییر مسیر دائمی‌ای که مرورگر به خاطر سپرده است | سمت شما، پس از اصلاح صاحب سایت | دستگاه‌های دیگر باز می‌کنند | از پنجره ناشناس استفاده کنید |
| تنظیمات HTTPS درگیر با هم، اغلب حالت Flexible در Cloudflare | سمت سایت | همه بازدیدکنندگان، همه دستگاه‌ها | صاحب سایت: حالت SSL/TLS را تغییر دهد |
| قاعده‌های www یا https در دو جا | سمت سایت | نشانی میان دو شکل جابه‌جا می‌شود | صاحب سایت: فقط یک قاعده نگه دارد |
| نشانی نادرست در تنظیمات وردپرس | سمت سایت | کل سایت یا پیشخوان در حلقه می‌افتد | صاحب سایت: دو فیلد نشانی را اصلاح کند |

## به‌عنوان بازدیدکننده چگونه آن را رفع کنید؟

پس از هر گام صفحه را دوباره بارگذاری کنید.

1. **یک پنجره ناشناس را امتحان کنید.** در کروم **بیشتر > پنجره ناشناس جدید** را انتخاب کنید. این پنجره بدون کوکی شروع می‌شود و افزونه‌ها فقط وقتی در آن اجرا می‌شوند که خودتان اجازه داده باشید. اگر صفحه باز شد، علت یک کوکی یا یک افزونه است.
2. **کوکی‌های همان یک سایت را حذف کنید،** همان سایتی که نامش در پیام آمده است. این کار فقط شما را از همان سایت خارج می‌کند.
   - کروم در رایانه: **بیشتر > تنظیمات > حریم خصوصی و امنیت > کوکی‌های طرف سوم > دیدن همه داده‌ها و اجازه‌های سایت** را باز کنید، نام سایت را جست‌وجو کنید و **حذف** را انتخاب کنید ([گام‌های گوگل](https://support.google.com/chrome/answer/95647?hl=fa)).
   - کروم در اندروید: در همان سایت، روی **اطلاعات صفحه** در ابتدای نوار نشانی (در رابط فارسی سمت راست) تک‌ضرب بزنید، سپس **کوکی‌ها و داده‌های سایت** و بعد **حذف**.
   - فایرفاکس: روی نماد سپر در ابتدای نوار نشانی کلیک کنید و سپس **پاک کردن کوکی‌ها و داده‌های سایت** را بزنید ([گام‌های موزیلا](https://support.mozilla.org/en-US/kb/clear-cookies-and-site-data-firefox)).
   - سافاری در مک: **Safari > Settings > Privacy > Manage Website Data** (سافاری > تنظیمات > حریم خصوصی > مدیریت داده‌های وب‌سایت) را باز کنید، سایت را انتخاب کنید و روی **Remove** (حذف) کلیک کنید ([گام‌های اپل](https://support.apple.com/guide/safari/manage-cookies-sfri11471/mac)).
   - سافاری در آیفون: **Settings > Apps > Safari > Advanced > Website Data > Remove All Website Data** (تنظیمات > برنامه‌ها > سافاری > پیشرفته > داده‌های وب‌سایت > حذف همه داده‌های وب‌سایت). این کار داده‌های همه سایت‌ها را پاک می‌کند، پس در سایت‌های دیگر هم باید دوباره وارد شوید.
3. **افزونه‌ها را خاموش کنید.** مسدودکننده‌های تبلیغات، ابزارهای حریم خصوصی، افزونه‌های «همیشه HTTPS» و افزونه‌های VPN می‌توانند مقصد یک صفحه را تغییر دهند. در کروم **بیشتر > افزونه‌ها > مدیریت افزونه‌ها** را باز کنید و آن‌ها را یکی‌یکی خاموش کنید ([گام‌های گوگل](https://support.google.com/chrome/answer/2664769?hl=fa)).
4. **تاریخ و ساعت را بررسی کنید.** مرورگر کوکی‌ای را که تاریخ انقضایش بر اساس ساعت دستگاه شما گذشته باشد دور می‌اندازد ([بخش 5.3 از ⁦RFC 6265⁩](https://www.rfc-editor.org/rfc/rfc6265#section-5.3))؛ پس ساعتی که چند روز جلوتر است می‌تواند کوکی تازه ورود را بلافاصله ناپدید کند. در ویندوز **Start > Settings > Time & language > Date & time** (شروع > تنظیمات > زمان و زبان > تاریخ و زمان) را انتخاب کنید و **Set time automatically** (تنظیم خودکار زمان) را روشن کنید ([گام‌های مایکروسافت](https://support.microsoft.com/en-us/windows/set-time-date-and-time-zone-settings-in-windows-dfaa7122-479f-5b98-2a7b-fa0b6e01b261)). ساعت نادرست هشدار [«اتصال شما خصوصی نیست»](/fa/blog/your-connection-is-not-private) را هم پدید می‌آورد.
5. **VPN یا پروکسی را خاموش کنید** و صفحه را دوباره بارگذاری کنید؛ بخش بعد دلیلش را توضیح می‌دهد.
6. **شبکه دیگری را امتحان کنید.** اگر صفحه در گوشی شما با اینترنت همراه هم باز نمی‌شود، حلقه در خود سایت است: نشانی صفحه و زمان را به صاحب سایت بگویید و صبر کنید. صفحه‌ای که اصلاً وصل نمی‌شود [خطای دیگری](/fa/blog/this-site-cant-be-reached) دارد.

### چرا هنگام ورود به حساب این‌قدر رخ می‌دهد؟

فرایندهای ورود عمداً میان نشانی‌ها جابه‌جا می‌شوند: یک فروشگاه شما را به یک سرویس ورود (سرویس خودش، گوگل یا مایکروسافت) می‌فرستد که کوکی‌ای می‌گذارد و شما را برمی‌گرداند. اگر کوکی هر یک از دو طرف نباشد یا مسدود شود، دوباره دور می‌زنید. وقتی پیام نام سرویس را می‌برد، مانند «تعداد دفعاتی که ⁦accounts.google.com⁩ شما را به نشانی‌های دیگر هدایت کرده بیش از حد است.»، کوکی‌های آن سرویس را هم در کنار کوکی‌های سایت حذف کنید و اگر کوکی‌ها را مسدود می‌کنید، به هر دو اجازه دهید.

## چرا VPN یا پروکسی گاهی حلقه تغییر مسیر می‌سازد؟

بسیاری از سایت‌ها نسخه کشوری را از روی آدرس IP شما انتخاب می‌کنند، مثلاً `/de/` برای آلمان، و این انتخاب را در یک کوکی هم به خاطر می‌سپارند. وقتی IP شما یک کشور را نشان می‌دهد و کوکی کشور دیگری را، این دو قاعده می‌توانند شما را مدام میان دو نسخه رفت و برگشت دهند ([مسدودسازی جغرافیایی چیست و سایت‌ها چگونه موقعیت را می‌فهمند؟](/fa/blog/what-is-geo-blocking)).

VPN کشوری را که سایت می‌بیند تغییر می‌دهد و یک پروکسی چرخشی حتی ممکن است دو گام از یک زنجیره را از دو آدرس متفاوت بفرستد. VPN را خاموش کنید و صفحه را دوباره بارگذاری کنید؛ اگر کار کرد، پیش از وصل شدن دوباره کوکی‌های سایت را حذف کنید یا کشور را در خود سایت انتخاب کنید. اگر آگاهانه از راه پروکسی مرور می‌کنید، در طول بازدید یک خروجی ثابت نگه دارید: یک [پروکسی با نشست ثابت](https://proxynet.io/fa/sticky-proxy) همان IP را برای مدتی که تعیین می‌کنید نگه می‌دارد ([فرق پروکسی و VPN چیست؟](/fa/blog/proxy-vs-vpn)).

## اگر سایت مال شماست: حلقه از کجا می‌آید؟

نخست زنجیره را بخوانید (بخش بعد)؛ الگوی آن به قاعده نادرست اشاره می‌کند.

### حالت SSL از نوع Flexible در Cloudflare

در حالت **Flexible**، بازدیدکنندگان با HTTPS به Cloudflare می‌رسند، اما Cloudflare با HTTP ساده و بدون رمزگذاری به سرور شما وصل می‌شود ([حالت‌های رمزگذاری Cloudflare](https://developers.cloudflare.com/ssl/origin-configuration/ssl-modes/)). سروری که HTTP را به HTTPS تغییر مسیر می‌دهد، هر درخواستی را که از Cloudflare می‌رسد HTTP می‌بیند و دوباره تغییر مسیر می‌دهد؛ در نتیجه `https://example.com/` به خودش تغییر مسیر داده می‌شود.

در داشبورد Cloudflare، **SSL/TLS > Overview** را باز کنید و اگر سرورتان گواهی معتبر دارد **⁦Full (strict)⁩** را انتخاب کنید، یا تا وقتی گواهی بگیرید **Full** را. حالت برعکس هم حلقه می‌سازد: حالت Full با سروری که HTTPS را به HTTP برمی‌گرداند. [صفحه Cloudflare درباره این خطا](https://developers.cloudflare.com/ssl/troubleshooting/too-many-redirects/) از **Always Use HTTPS**، HSTS و قاعده‌های تغییر مسیر متعارض هم نام می‌برد.

### قاعده‌های HTTPS و www در دو جا

پنل هاست `www.` را به نشانی اضافه می‌کند در حالی که برنامه سایت آن را برمی‌دارد، یا CDN اتصال را به HTTPS می‌برد در حالی که سرور آن را به HTTP برمی‌گرداند. یک نشانی عمومی انتخاب کنید، آن را فقط در یک لایه اعمال کنید و قاعده‌های دیگر را حذف کنید، از جمله افزونه‌های تغییر مسیر و سطرهای `.htaccess`. نوشته [فوروارد پروکسی و ریورس پروکسی: تفاوت در چیست؟](/fa/blog/forward-vs-reverse-proxy) توضیح می‌دهد وقتی یک CDN جلوی سایت قرار دارد، کدام لایه چه چیزی را می‌بیند.

### تنظیمات نشانی در وردپرس

وردپرس تغییر مسیرهایش را از روی **نشانی وردپرس (URL)** و **نشانی سایت (URL)** در **تنظیمات > عمومی** می‌سازد. [راهنمای وردپرس](https://developer.wordpress.org/advanced-administration/upgrade/migrating/#changing-the-site-url) می‌گوید هر دو باید با `https://` شروع شوند و در پایانشان اسلش نباشد؛ پروتکل نادرست یا یک `www` اضافه بازدیدکنندگان را دور خود می‌چرخاند. اگر حلقه راه ورود به پیشخوان را بسته است، این دو مقدار را در فایل `wp-config.php` تعیین کنید:

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

اگر یک متعادل‌کننده بار یا ریورس پروکسی کار HTTPS را انجام می‌دهد و خود وردپرس روی HTTP ساده اجرا می‌شود، وردپرس هر درخواست را ناامن می‌داند و به تعبیر مستندات خودش در یک حلقه بی‌پایان تغییر مسیر می‌افتد. کاری کنید که هدر `X-Forwarded-Proto` را که پروکسی می‌فرستد بخواند، همان‌طور که [راهنمای HTTPS وردپرس](https://developer.wordpress.org/advanced-administration/security/https/#using-a-reverse-proxy) نشان می‌دهد.

### اصلاح را در پنجره ناشناس بیازمایید

استاندارد HTTP به مرورگرها اجازه می‌دهد تغییر مسیر `301` (⁦Moved Permanently⁩، یعنی «برای همیشه منتقل شد») را ذخیره کنند؛ پس مرورگر خودتان ممکن است پس از اصلاح همچنان در حلقه بماند. در یک پنجره ناشناس آزمایش کنید و تا وقتی در حال آزمودن هستید از تغییر مسیرهای موقت `302` استفاده کنید.

## سطح پیشرفته: زنجیره تغییر مسیر را با یک فرمان ببینید

این بخش برای کسانی است که با خط فرمان راحت‌اند. `curl` در ویندوز 10، ویندوز 11 و مک از پیش نصب است (در PowerShell به جای آن `curl.exe` بنویسید). این فرمان تغییر مسیرها را دنبال می‌کند، هدرهای هر گام را چاپ می‌کند و پس از ده گام می‌ایستد:

```bash
curl -sSIL --max-redirs 10 https://example.com/
```

آن را روی یک سرور آزمایشی در رایانه خودمان اجرا کردیم که حلقه Flexible را بازسازی می‌کند. سطرهای کلیدی، به شکل کوتاه‌شده (⁦curl 8.21.0⁩، ویندوز 11):

```text
HTTP/1.1 301 Moved Permanently
Location: https://example.com/
HTTP/1.1 301 Moved Permanently
Location: https://example.com/
HTTP/1.1 301 Moved Permanently
Location: https://example.com/
curl: (47) Maximum (10) redirects followed
```

این خروجی را این‌گونه بخوانید:

- **`Location` همان نشانی‌ای را تکرار می‌کند که خواسته بودید:** سرور فکر می‌کند درخواست با HTTP آمده است (حالت Flexible، یا پروکسی‌ای که `X-Forwarded-Proto` را نمی‌فرستد).
- **نشانی میان دو شکل جابه‌جا می‌شود،** مثلاً با `www` و بدون آن: دو قاعده با هم موافق نیستند.
- **نشانی میان یک صفحه و صفحه ورود جابه‌جا می‌شود:** یک کوکی نگه داشته نمی‌شود؛ سطرهای `Set-Cookie` را بررسی کنید.
- **زنجیره با `200` تمام می‌شود:** سرور سالم است و حلقه در کوکی‌ها یا حافظه پنهان (کش) یک مرورگر است.

## اگر اسکرپر یا خزنده می‌نویسید

هر دو پیام زیر را روی یک صفحه آزمایشی که در حلقه می‌افتد پدید آوردیم:

| ابزار | آنچه چاپ می‌کند |
|---|---|
| Requests در پایتون (نسخه 2.34) | `requests.exceptions.TooManyRedirects: Exceeded 30 redirects.` |
| Playwright برای پایتون (نسخه 1.58) | `Page.goto: net::ERR_TOO_MANY_REDIRECTS at <url>` |

کتابخانه Requests پس از 30 تغییر مسیر دست می‌کشد و مرورگرها پس از 20، و بالا بردن این سقف هرگز کمکی نمی‌کند. علت‌های معمول در کد:

- **ظرف کوکی مشترکی وجود ندارد.** فراخوانی‌های جداگانه `requests.get()` کوکی‌ها را با هم شریک نمی‌شوند؛ برای هر سایت یک `requests.Session()` به کار ببرید ([نشست و کوکی در Python: ورود با requests](/fa/blog/python-login-session-cookies)).
- **کوکی‌ای که کلاینت شما هرگز دریافت نمی‌کند.** برخی صفحه‌ها آن را با JavaScript یا پس از یک کلیک می‌گذارند، مانند بنر رضایت کوکی، و یک کلاینت ساده HTTP هرگز آن را اجرا نمی‌کند. در چنین صفحه‌هایی از API سایت یا یک مرورگر واقعی استفاده کنید. اگر زنجیره به یک صفحه مسدودی ختم شد، همان‌جا بایستید: این تصمیم سایت است ([خطای Sorry, You Have Been Blocked چیست و چرا ظاهر می‌شود؟](/fa/blog/sorry-you-have-been-blocked)).
- **IP خروجی در میانه راه عوض می‌شود.** با چرخش به‌ازای هر درخواست، هر گام می‌تواند از IP دیگری، حتی از کشور دیگری، خارج شود و سایتی که نسخه کشوری را از روی IP انتخاب می‌کند، گام دوم را به جایی می‌فرستد که گام اول هرگز نخواسته بود. با نشست ثابت برای هر زنجیره یک خروجی نگه دارید و کشور را با هدف‌گیری ثابت کنید؛ [پروکسی مسکونی](https://proxynet.io/fa/residential-proxy) هر دو را ارائه می‌کند ([پروکسی چرخشی چیست؟ چرخش IP برای اسکرپینگ و اتوماسیون](/fa/blog/ip-rotation-explained)).

برای اینکه ببینید زنجیره کجا برمی‌گردد، آن را گام‌به‌گام دنبال کنید:

```python
from urllib.parse import urljoin, urlsplit

import requests

PROXY = "http://user:pass@pr.proxynet.io:8000"  # use a sticky-session username
START = "https://example.com/account"

def trace(url, session, max_hops=10):
    """Follow redirects one hop at a time and stop at the first repeat."""
    seen = set()
    for hop in range(max_hops):
        r = session.get(url, allow_redirects=False, timeout=15)
        target = r.headers.get("Location", "")
        cookie = "sets a cookie" if "Set-Cookie" in r.headers else "no cookie"
        print(hop, r.status_code, urlsplit(url).path, "->", target, f"({cookie})")
        if not r.is_redirect:
            return r
        if url in seen:
            print("Loop found: this URL was already requested")
            return None
        seen.add(url)
        url = urljoin(url, target)
    print(f"Stopped after {max_hops} hops")
    return None

with requests.Session() as s:  # one cookie jar for the whole chain
    s.proxies = {"http": PROXY, "https": PROXY}
    s.headers["User-Agent"] = "example-crawler/1.0 (+https://example.com/bot)"
    trace(START, s)
```

این اسکریپت را از راه یک پروکسی آزمایشی محلی با احراز هویت `user:pass` روی صفحه‌ای آزمایشی اجرا کردیم که حلقه رضایت کوکی را بازسازی می‌کند؛ در یک سایت واقعی این کوکی از کلیک روی یک دکمه می‌آمد (⁦requests 2.34.2⁩، ⁦Python 3.13⁩):

```text
0 302 /account -> /consent (no cookie)
1 302 /consent -> /account (no cookie)
2 302 /account -> /consent (no cookie)
Loop found: this URL was already requested
```

هیچ گامی کوکی نمی‌گذارد، پس این کلاینت هرگز به `/account` نمی‌رسد. اگر گامی کوکی بگذارد و حلقه باز هم ادامه پیدا کند، دامنه (domain) و مسیر (path) کوکی را با نشانی بعدی مقایسه کنید و سپس بررسی کنید که IP خروجی‌تان ثابت مانده باشد. مؤدبانه اشکال‌زدایی کنید: هر بار یک زنجیره، یک User-Agent که شما را معرفی می‌کند، و پایبندی به قاعده‌های [robots.txt](/fa/blog/robots-txt).

## کجا ممکن است با آن روبه‌رو شوید

- **پیوندهای تبلیغاتی** که از چند تغییر مسیر ردیابی می‌گذرند و از یک IP بررسی می‌شوند ([تأیید تبلیغات با پروکسی چگونه انجام می‌شود؟](/fa/blog/ad-verification-with-proxies)).
- **خزنده‌هایی** که پس از انتقال یک سایت به نشانی یا ساختار تازه به حلقه برمی‌خورند ([چگونه با پایتون خزنده وب بسازیم؟](/fa/blog/python-web-crawler)).
- **ابزارهای پایش** که پس از تغییر یک تنظیم، حلقه را گزارش می‌کنند ([چگونه تغییرات یک وب‌سایت را پایش کنیم و هشدار بگیریم؟](/fa/blog/website-change-monitoring)).
- **خودکارسازی مرورگر** با یک پروفایل تازه یا یک پروکسی ([Playwright با پروکسی](/fa/blog/playwright-proxy)).

## اشتباه‌های رایج

- **حذف همه کوکی‌ها در گام اول.** شما را از همه جا خارج می‌کند؛ از سایتی شروع کنید که نامش در پیام آمده است.
- **نصب دوباره مرورگر یا راه‌اندازی دوباره مودم.** حلقه در یک کوکی، یک افزونه یا قاعده‌های سایت است.
- **بالا بردن سقف تغییر مسیر در کد.** حلقه در 30 پرش و در 100 پرش همچنان حلقه است.
- **آزمودن اصلاح سرور در همان مرورگر،** که یک `301` را به خاطر سپرده و حلقه قدیمی را زنده نگه می‌دارد.
- **خاموش کردن HTTPS برای متوقف کردن حلقه** به جای هماهنگ کردن لایه‌ها با هم.

## راهنمای انتخاب

| وضعیت شما | چه کنید |
|---|---|
| یک سایت باز نمی‌شود، یا فقط بیرون از پنجره ناشناس باز نمی‌شود | کوکی‌های آن سایت را حذف کنید، سپس افزونه‌ها را بررسی کنید |
| حلقه از یک صفحه ورود شروع می‌شود | کوکی‌های سایت و سرویس ورود را حذف کنید |
| فقط وقتی VPN یا پروکسی روشن است | آن را خاموش کنید، کوکی‌های سایت را حذف کنید و کشور را در سایت انتخاب کنید |
| در همه دستگاه‌ها و شبکه‌ها باز نمی‌شود | صبر کنید یا با سایت تماس بگیرید |
| سایت شما روی Cloudflare به همان نشانی تغییر مسیر می‌دهد | حالت SSL/TLS را روی ⁦Full (strict)⁩ بگذارید |
| سایت وردپرسی شما پس از رفتن به HTTPS در حلقه افتاده است | دو فیلد نشانی را اصلاح کنید |
| اسکرپر شما پیام `Exceeded 30 redirects` می‌دهد | برای هر زنجیره یک نشست و یک خروجی ثابت؛ گام‌ها را دنبال کنید |

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

### آیا ERR_TOO_MANY_REDIRECTS ویروس یا نشانه هک شدن است؟

نه. این خطا از یک کوکی، یک افزونه یا قاعده‌های تغییر مسیر خود سایت می‌آید و مرورگر عمداً متوقف شده است.

### چرا خطا در یک سایت دیده می‌شود و در سایت‌های دیگر نه؟

حلقه در قاعده‌های همان سایت یا در کوکی‌هایی است که برای آن ذخیره شده است؛ سایت‌های دیگر کوکی‌ها و قاعده‌های خودشان را دارند.

### آیا باید همه کوکی‌هایم را حذف کنم؟

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

### چرا حلقه فقط وقتی VPN روشن است رخ می‌دهد؟

سایت نسخه کشوری را از روی IP شما انتخاب می‌کند، در حالی که یک کوکی کشور دیگری را به خاطر دارد. VPN را خاموش کنید، کوکی‌های سایت را حذف کنید و دوباره وصل شوید، یا کشور را در خود سایت انتخاب کنید.

### کروم اجازه چند تغییر مسیر را می‌دهد؟

بیست، یعنی سقفی که استاندارد Fetch تعیین کرده است؛ فایرفاکس هم همین عدد را به کار می‌برد و کتابخانه Requests پایتون عدد 30 را. یک صفحه معمولی به یک یا دو تغییر مسیر نیاز دارد.

### خطای too many redirects را در Cloudflare چگونه رفع کنیم؟

حالت SSL/TLS را روی ⁦Full (strict)⁩ بگذارید که به گواهی معتبر روی سرور شما نیاز دارد، یا اگر روی Flexible می‌مانید، تغییر مسیر HTTP به HTTPS خود سرور را بردارید. سپس Always Use HTTPS، HSTS و قاعده‌های تغییر مسیرتان را از نظر موارد تکراری بررسی کنید.

## خلاصه

`ERR_TOO_MANY_REDIRECTS` یعنی سایتی مرورگر شما را دور یک دایره چرخانده و مرورگر پس از 20 پرش ایستاده است. بازدیدکنندگان بیشتر موارد را با حذف کوکی‌های یک سایت، امتحان یک پنجره ناشناس، خاموش کردن افزونه‌ها و VPN و بررسی ساعت حل می‌کنند؛ حلقه‌ای را که در همه دستگاه‌ها دیده می‌شود باید خود سایت رفع کند. صاحبان سایت باید دنبال دو قاعده‌ای بگردند که با هم موافق نیستند. در کد، برای هر زنجیره یک نشست و یک خروجی ثابت نگه دارید. انواع پروکسی و کاربرد هرکدام را می‌توانید در [صفحه پروکسی ما](/fa/proxy) مقایسه کنید.
