مسدودسازی دسترسی کشورهای خاص در وردپرس با استفاده از فایل .htaccess، که به آن geo-blocking نیز گفته میشود، به معنای محدود کردن ترافیک ورودی سایت شما بر اساس کشور مبدا آنها در سطح سرور است. برای این کار معمولاً از قوانین .htaccess در سرورهای Apache یا LiteSpeed، دیتابیس GeoIP/MaxMind، فهرستهای بلوک آیپی یا سرویسهای CDN و WAF بهره برده میشود. نکته مهم این است که فایل .htaccess به تنهایی نمیتواند کشور کاربر را تشخیص دهد؛ برای این منظور باید سرور اطلاعات کشور را به صورت متغیر محیطی فراهم کند یا رنجهای IP مربوط به کشورها در قوانین قرار گیرد.
در این راهنما روند کار مسدودسازی کشورها در سایتهای وردپرسی با .htaccess، زمانهای مناسب استفاده، نمونه قوانین، روشهای ایمن پیادهسازی و اشتباهات رایج را بررسی میکنیم. هدف صرفاً ارائه چند خط کد نیست؛ بلکه فرآیندی کاربردی ارائه میشود که در سایت زنده باعث خطای ۵۰۰، افت SEO، مشکل در پرداخت یا محدود شدن اشتباهی رباتهای گوگل نشود. اگر سایت وردپرس خود را روی هاستهای Hostragons میزبانی میکنید، قبل از تغییرات حتماً از پنل هاست خود نسخه پشتیبان بگیرید و تغییرات را مرحله به مرحله اعمال کنید هاستینگ وردپرس.
Geo-Blocking چیست و در سایتهای وردپرس چه کاربردی دارد؟
Geo-blocking روشی است برای محدود کردن دسترسی کاربران بر اساس موقعیت جغرافیایی آنها که معمولاً از روی آدرس IP حدس زده میشود. به عنوان مثال یک فروشگاه اینترنتی که فقط در ایران فعالیت دارد، ممکن است برای جلوگیری از ثبتنامهای جعلی، کامنتهای اسپم یا حملات brute-force از کشورهای دیگر، دسترسی آنها را مسدود کند.
در وردپرس، این روش میتواند کاربردهای متعددی داشته باشد:
- کاهش تلاشهای نفوذ مخرب به پنل مدیریت.
- کاهش ثبتنامهای رباتی، نظرات اسپم و ارسال فرمهای جعلی.
- محدود کردن دسترسی بر اساس مجوزهای قانونی، حق نشر یا قراردادهای خاص.
- حفاظت از منابع سرور در برابر ترافیک غیرهدفمند.
- کاهش درخواستهای بیمورد از مناطق غیرقابل سرویسدهی مانند پرداخت، حملونقل یا خدمات.
با این حال، geo-blocking نمیتواند جایگزین کامل فایروال امنیتی باشد. تشخیص کشور مبتنی بر IP میتواند نادرست باشد، توسط VPN یا پراکسی دور زده شود و برخی کاربران واقعی به اشتباه مسدود شوند. بنابراین مسدودسازی کشورها باید همراه با اقدامات امنیتی پایه مانند رمز عبور قوی، احراز هویت دو مرحلهای، بهروزرسانی هسته وردپرس، افزونههای مطمئن، گواهی SSL و پشتیبانگیری منظم انجام شود گواهینامه SSL.
فایل .htaccess چگونه از اطلاعات کشور استفاده میکند؟
فایل .htaccess یک فایل قدرتمند برای پیکربندی سطح پوشه در سرورهای مبتنی بر Apache و LiteSpeed است. با آن میتوان ساختار پیوند یکتا، ریدایرکتها، قواعد کش، مجوزهای دسترسی و محدودیتهای امنیتی را مدیریت کرد. اما به طور پیشفرض این فایل نمیتواند کشور IP را تشخیص دهد.
برای مسدودسازی بر اساس کشور سه راهکار اصلی وجود دارد:
- نوشتن قوانین با استفاده از متغیرهای کشور که توسط ماژولهای GeoIP یا MaxMind در سرور فراهم شدهاند.
- افزودن رنجهای IP کشورهای مورد نظر به فایل .htaccess.
- اجرای geo-blocking در سطح CDN یا WAF و استفاده از .htaccess به عنوان مکمل.
تا سال ۲۰۲۶، بهترین روش معمولاً استفاده از CDN، WAF یا راهکارهای مبتنی بر MaxMind در سطح سرور است؛ چرا که رنجهای IP کشورها بهصورت مرتب تغییر میکنند و هزاران خط قانون در .htaccess میتواند عملکرد سایت را کند کند. با این حال، برای محدودیتهای کوچک و کنترل شده، .htaccess هنوز ابزار مناسبی است.
قبل از شروع کار حتماً انجام دهید
ویرایش نادرست فایل .htaccess ممکن است سایت شما را کاملاً از دسترس خارج کند. رایجترین مشکلات شامل خطای ۵۰۰، حلقه ریدایرکت، مشکل دسترسی به پنل مدیریت و خطای ۴۰۳ غیرمنتظره است. بنابراین قبل از تغییرات این موارد را چک کنید:
- نسخه فعلی فایل .htaccess را دانلود و با تاریخ مشخص نگه دارید.
- از فایلها و دیتابیس وردپرس نسخه پشتیبان تهیه کنید پشتیبانگیری وبسایت.
- اطمینان حاصل کنید که دسترسی به فایل منیجر یا FTP در پنل هاست دارید.
- ابتدا یک قانون تستی اضافه کنید؛ همه آیپیها یا کشورها را همزمان اضافه نکنید.
- بررسی کنید که Googlebot، سرویسهای پرداخت، کدهای حملونقل، APIها و رنجهای IP CDN تحت تأثیر قرار نگیرند.
- دسترسی سایت را از شبکههای مختلف پس از تغییر تست کنید و فقط با مرورگر خود بررسی نکنید.
در تجربه عملی، بیشتر خطاها به دلیل درج قانون در محل نادرست رخ میدهد. قوانین وردپرس معمولاً بین خطوط BEGIN WordPress و END WordPress قرار دارند. بهتر است قوانین امنیتی را بالاتر از این بلوک قرار دهید چون هنگام ذخیره تنظیمات پیوند یکتا، وردپرس این بلوک را بازنویسی میکند.
روش اول: مسدودسازی کشور با متغیر GeoIP یا MaxMind در .htaccess
اگر سرور شما کد کشور را به عنوان متغیر محیطی ارائه دهد، میتوانید در .htaccess بر اساس آن محدودیت اعمال کنید. در تنظیمات قدیمیتر از mod_geoip و در نسخههای جدیدتر از MaxMind GeoLite2 و mod_maxminddb استفاده میشود. نام متغیر بسته به پیکربندی سرور متفاوت است؛ نمونههای رایج GEOIP_COUNTRY_CODE، MM_COUNTRY_CODE یا GEOIP_COUNTRY_CODE_V6 هستند.
نمونه منطق
نمونه زیر فرض میکند متغیر GEOIP_COUNTRY_CODE فعال است و کشورهای مشخصی را مسدود میکند. پیش از استفاده، با سرویسدهنده هاست خود متغیر پشتیبانی شده را چک کنید.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^(RU|CN|KP)$
RewriteRule ^ - [F,L]
</IfModule>
در این مثال درخواستهایی از کشورهای روسیه (RU)، چین (CN) و کره شمالی (KP) با کد پاسخ ۴۰۳ رد میشوند. کد کشورها طبق استاندارد ISO 3166-1 alpha-2 است؛ برای مثال ایران IR، آلمان DE و آمریکا US است. میتوانید چند کشور را با خط عمودی جدا کنید.
محدودسازی فقط برای صفحه wp-login.php
به جای مسدود کردن کل سایت، هدف قرار دادن صفحه ورود وردپرس (wp-login.php) برای بسیاری از کسبوکارها راهحل متعادلتری است. مثلاً میخواهید سایت برای همه قابل مشاهده باشد ولی ورود به مدیریت فقط از برخی کشورها ممکن باشد.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/wp-login\.php$ [NC]
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^(RU|CN)$
RewriteRule ^ - [F,L]
</IfModule>
این ساختار دسترسی به صفحات محتوا را حفظ میکند و فقط صفحه ورود را محدود میکند. از آنجا که بخش عمده حملات brute-force به wp-login.php و xmlrpc.php متمرکز است، این روش تأثیر امنیتی قابل توجهی دارد و مصرف منابع را بهینه میکند.
روش دوم: مسدودسازی بر اساس رنجهای IP کشورها در .htaccess
اگر سرور متغیر GeoIP ندارد، میتوانید رنجهای آیپی کشورهای مورد نظر را به صورت دستی به فایل .htaccess اضافه کنید. البته این روش نگهداری دشواری دارد. برای کشورهای بزرگ هزاران بلوک CIDR وجود دارد که مدیریت آنها در .htaccess علاوه بر پیچیدگی، میتواند باعث کاهش کارایی شود. همچنین به روزرسانی مرتب فهرست ضروری است.
در Apache 2.4 به بعد میتوان از ساختار Require not ip استفاده کرد. نمونه:
<RequireAll>
Require all granted
Require not ip 203.0.113.0/24
Require not ip 198.51.100.0/24
</RequireAll>
رنجهای بالا فقط مثال مستنداتی هستند و فهرست واقعی نیستند. برای استفاده از فهرستهای واقعی باید از منابع معتبر و بهروز CIDR بهره ببرید. اگر قرار است صدها یا هزاران قانون اضافه کنید، بهتر است این کار را به فایروال سرور، WAF یا CDN منتقل کنید تا عملکرد سایت حفظ شود.
روش سوم: Geo-Blocking با CDN یا WAF و پشتیبانی با .htaccess
امروزه مقیاسپذیرترین راهکار برای مسدودسازی کشورها در وردپرس استفاده از CDN یا WAF است. سرویسهایی مانند Cloudflare، Sucuri، LiteSpeed Web ADC و Imunify360 میتوانند قوانین جغرافیایی را سریعتر و متمرکزتر اعمال کنند. این سرویسها درخواستها را قبل از رسیدن به سرور وب فیلتر میکنند و بار پردازشی CPU، RAM و PHP را کاهش میدهند.
فایل .htaccess در این حالت بیاستفاده نیست. مثلاً برای دریافت IP واقعی کاربر از CDN، محدود کردن دسترسی به فایلهای حساس یا اعمال قوانین اضافی روی URLهای ورود وردپرس میتوان از آن بهره برد. اما مسئولیت اصلی geo-blocking به CDN واگذار میشود که در سایتهای پرترافیک پایدارتر است.
مقایسه روشها
| روش | مزایا | معایب | مناسب برای |
|---|---|---|---|
| GeoIP متغیری در .htaccess | سرعت بالا در سطح سرور؛ وابسته به افزونه وردپرس نیست. | نیاز به پشتیبانی GeoIP/MaxMind در سرور؛ نام متغیر متفاوت است. | سایتهای Apache/LiteSpeed که کنترل فنی دارند. |
| رنجهای IP در .htaccess | بدون نیاز به ماژول اضافه؛ برای لیستهای کوچک مناسب. | نگهداری دشوار و افت عملکرد در لیستهای بزرگ. | محدود کردن تعداد کمی رنج IP. |
| Geo-blocking در CDN/WAF | فیلتر قبل از رسیدن درخواست به سرور؛ مدیریت آسان؛ گزارشدهی. | نیاز به تنظیمات سرویس اضافی؛ احتمال مسدودسازی اشتباه. | سایتهای پرترافیک و امنیت محور. |
| افزونه امنیتی وردپرس | مدیریت از پنل؛ نیاز فنی کم. | بعد از اجرای PHP فعال میشود؛ مصرف منابع بالاتر. | سایتهای کوچک و متوسط که نمیخواهند کد تغییر دهند. |
گام به گام: پیادهسازی امن Geo-Blocking با .htaccess در وردپرس

۱. هدف مسدودسازی را مشخص کنید
تصمیم بگیرید کل سایت را مسدود کنید یا فقط فایل wp-login.php یا نقاط حساس مانند xmlrpc.php را محدود نمایید. بستن کل سایت از نظر SEO و تجربه کاربری ریسک بالایی دارد. محدودسازی بخشهای مدیریت یا نقاط حمله معمولاً نتیجه بهتری دارد.
۲. دادههای ترافیکی را تحلیل کنید
قبل از تصمیمگیری، لاگهای دسترسی حداقل ۷ تا ۱۴ روز، گزارشهای افزونههای امنیتی و دادههای Google Analytics را بررسی کنید. مثلاً اگر کشوری ۳٪ ترافیک دارد ولی ۶۰٪ حملات از آنجا میآید، محدودیت منطقی است. اما اگر ۱۲٪ فروش ارگانیک از همان کشور است، مسدودسازی کل کشور به ضرر شما خواهد بود.
۳. پشتیبانی سرور را بسنجید
نوع سرور خود (Apache، LiteSpeed یا Nginx) را مشخص کنید. .htaccess فقط در Apache و LiteSpeed کار میکند و در Nginx باید به صورت مستقیم در فایل پیکربندی سرور تنظیمات مشابه اعمال شود. هنگام انتخاب بسته هاست در Hostragons، حتماً سازگاری با وردپرس، امکانات پشتیبانگیری، SSL و امنیت را در نظر بگیرید هاستینگ وب.
۴. قانون تستی را اضافه کنید
ابتدا محدودسازی یک کشور یا یک رنج IP را امتحان کنید. قانون را بالای بلوک وردپرس در فایل .htaccess قرار دهید. پس از ذخیره، صفحات اصلی، پنل مدیریت، صفحات محصول، ارسال فرمها و مراحل پرداخت را تست کنید.
۵. لاگها را بررسی کنید
تعداد پاسخهای ۴۰۳ و منابع آنها را زیر نظر بگیرید. اگر تعداد ۴۰۳های غیرمنتظره بالا باشد، ممکن است قانون بیش از حد گسترده باشد. در صورت استفاده از CDN، ممکن است IP واقعی کاربر دیده نشود و تشخیص کشور اشتباه انجام شود.
۶. قانون را مستند کنید
در فایل .htaccess توضیحاتی برای هر قانون بنویسید. مثلاً کدام کشور به چه دلیل مسدود شده، تاریخ ایجاد قانون و نام شخص تاییدکننده. این کار برای نگهداری و بهروزرسانی بعدی حیاتی است. نمونه: # ۲۰۲۶-۰۲-۱۵: مسدودسازی ورود به دلیل حملات از RU و CN.
نکات مهم SEO در Geo-Blocking
Geo-blocking میتواند روی SEO تأثیر مستقیم بگذارد. ربات گوگل معمولاً از IPهای آمریکایی برای خزیدن استفاده میکند. اگر کشورهایی مانند آمریکا را در کل سایت مسدود کنید، ممکن است گوگل نتواند صفحات شما را ایندکس کند که منجر به افت رتبه و خطاهای دسترسی در Search Console میشود.
برای حفظ SEO به موارد زیر توجه کنید:
- از مسدود نکردن اشتباهی رباتهای گوگل، بینگ و دیگر موتورهای جستجو اطمینان حاصل کنید.
- اگر target market بینالمللی دارید، قوانین hreflang، canonical و ریدایرکتها را بررسی کنید.
- صفحات ۴۰۳ پیام مناسبی به کاربر نشان دهند؛ صفحه خالی باعث کاهش اعتماد میشود.
- پس از تغییرات، گزارشهای Search Console را بررسی کنید.
- از geo-blocking برای پنهانسازی محتوا یا ارائه نسخه متفاوت استفاده نکنید؛ این ریسک cloaking دارد.
برای سایتهایی با محتوای جهانی، SaaS، گردشگری و برندهای صادراتی باید تصمیم محدودسازی کشورها به دقت گرفته شود. اگر صرفاً هدف کاهش فرمهای اسپم است، استفاده از reCAPTCHA، محدودیت نرخ درخواست، افزونه امنیتی یا قواعد WAF کمتر ریسک دارد.
آیا Geo-Blocking به تنهایی امنیت کافی دارد؟
خیر. geo-blocking فقط سطح حمله را کاهش میدهد اما مانع کامل نفوذ نمیشود. مهاجمان میتوانند با VPN، پراکسی، باتنت یا IPهای سرور ابری محدودیتها را دور بزنند. به همین دلیل امنیت وردپرس باید چندلایه باشد و دستکم اقدامات زیر اجرا شود:
- هسته وردپرس، قالب و افزونهها را مرتب بهروزرسانی کنید.
- از نام کاربری منحصر به فرد و رمز عبور قوی برای ادمین استفاده کنید.
- احراز هویت دو مرحلهای را فعال نمایید.
- محدودیت نرخ درخواست برای wp-login.php و xmlrpc.php اعمال کنید.
- افزونههای غیرضروری را حذف کنید و قالبهای ناشناس استفاده نکنید.
- تمام ترافیک را با گواهی SSL از طریق HTTPS ارائه دهید گواهینامه SSL.
- نسخه پشتیبان منظم و برنامه بازیابی داشته باشید.
همچنین زیرساخت میزبانی مناسب شامل جداسازی منابع، نسخه PHP بهروز، اسکن بدافزار، پشتیبانگیری خودکار و پشتیبانی سریع، نقش مهمی در امنیت دارد هاستینگ امن وردپرس.
اشتباهات رایج و راهحلها
اشتباه ۱: افزودن لیست IP بسیار بزرگ در .htaccess
قوانین بسیار زیاد در هر درخواست پردازش میشوند و باعث کاهش سرعت سایت میشوند. بهتر است مدیریت این لیستها را به CDN، WAF یا فایروال سرور بسپارید.
اشتباه ۲: مسدودکردن رباتهای گوگل و سرویسهای حیاتی
سرویسهای پرداخت، ایمیل، APIهای حملونقل و رباتهای موتور جستجو ممکن است از کشورهای مختلف درخواست بفرستند. پس از تغییرات لاگها را بررسی کرده و سرویسهای حیاتی را در فهرست سفید قرار دهید.
اشتباه ۳: انتظار عملکرد .htaccess در سرور Nginx
Nginx فایل .htaccess را نمیخواند. در این سرورها باید قوانین مشابه را در فایل پیکربندی Nginx بنویسید. در هاست اشتراکی ممکن است دسترسی به این سطح نباشد و استفاده از CDN یا افزونه امنیتی مناسبتر است.
اشتباه ۴: ویرایش فایل زنده بدون نسخه پشتیبان
یک اشتباه کوچک میتواند سایت را از دسترس خارج کند. همیشه قبل از تغییر، نسخه پشتیبان بگیرید و اگر از فایل منیجر استفاده میکنید، محتویات قبلی را در فایل متنی ذخیره کنید.
اشتباه ۵: مسدودسازی کشورها بدون داده و تحلیل
محدودکردن بدون تحلیل میتواند منجر به از دست رفتن مشتری شود. ابتدا لاگها و گزارشها را بررسی کنید و اگر لازم است فقط بخشهایی مثل wp-login.php یا فرمهای خاص را محدود کنید.
راهکارهای جایگزین: افزونه، فایروال و راهکارهای سروری
اگر نمیخواهید کدنویسی کنید، افزونههای امنیتی وردپرس قابلیت مسدودسازی کشورها را ارائه میدهند. اما این افزونهها معمولاً پس از اجرای PHP فعال میشوند و در برابر ترافیک سنگین به اندازه .htaccess یا WAF زودهنگام عمل نمیکنند. با این حال برای سایتهای کوچک مدیریت آسانتری دارند.
در سطح سرور میتوان با ابزارهایی مانند CSF، firewalld، iptables یا از طریق پنل مدیریت هاست، رنجهای IP را مسدود کرد. این روشها زودتر از .htaccess اجرا میشوند ولی اغلب در هاست اشتراکی در دسترس نیستند. در این شرایط میتوانید با تیم پشتیبانی Hostragons مشورت کنید یا سرویسهای میزبانی مدیریتشده را بررسی نمایید بستههای هاستینگ.
چکلیست پس از اعمال تنظیمات
پس از افزودن قوانین geo-blocking، موارد زیر را بررسی کنید تا مطمئن شوید همه چیز درست کار میکند:
- صفحات اصلی، دستهبندی، نوشتهها، محصولات و سبد خرید را تست کنید.
- دسترسی به wp-admin و wp-login.php را از کشورهای مجاز بررسی کنید.
- فرم تماس، ثبتنام و مراحل پرداخت را امتحان کنید.
- تست زنده URL را در Google Search Console انجام دهید.
- لاگهای سرور را برای افزایش خطاهای ۵۰۰ یا ۴۰۳ بررسی کنید.
- اگر از CDN استفاده میکنید، کش را پاک کرده و صحت انتقال IP واقعی را کنترل کنید.
- مستندات قوانین را با هدف و تاریخ اجرا بهروزرسانی کنید.
این مراحل بهویژه برای سایتهای درآمدزا و بزرگ حیاتی است. یک قانون ساده مسدودسازی کشور میتواند روی تبدیل پرداخت، امتیاز کیفیت تبلیغات، سرویسهای اعتبارسنجی ایمیل یا APIهای یکپارچهسازی تأثیر بگذارد API و ادغامها.
سؤالات متداول
آیا میتوان با فایل .htaccess در وردپرس دسترسی کشورهای خاص را مسدود کرد؟
بله امکانپذیر است؛ اما فایل .htaccess باید به متغیرهای GeoIP/MaxMind در سرور دسترسی داشته باشد یا رنجهای IP مربوطه را در قوانین اضافه کنید. به تنهایی نمیتواند کشور IP را تشخیص دهد.
آیا مسدودسازی کشورها با .htaccess به SEO آسیب میزند؟
اگر اشتباه پیکربندی شود بله، میتواند آسیب بزند. به خصوص اگر رباتهای گوگل یا IPهای CDN را مسدود کنید، ممکن است خزیدن سایت مختل شود. محدود کردن تنها بخشهای حساس مانند wp-login.php امنتر است.
از چه کدهای کشوری باید استفاده کنم؟
معمولاً از کدهای ISO 3166-1 alpha-2 استفاده میشود. برای مثال ایران IR، آلمان DE، آمریکا US و فرانسه FR. باید با پیکربندی GeoIP سرور مطابقت داشته باشد.
آیا میتوان در سرور Nginx با .htaccess Geo-blocking انجام داد؟
خیر، Nginx فایل .htaccess را نمیخواند. باید قوانین مشابه را در فایل تنظیمات Nginx، ماژول geo یا از طریق CDN، WAF و افزونههای امنیتی اعمال کنید.
آیا Geo-blocking میتواند مهاجمان VPN را متوقف کند؟
خیر، مهاجمان با VPN، پراکسی یا باتنت میتوانند کشور را تغییر دهند و محدودیتها را دور بزنند. Geo-blocking فقط یک لایه اضافی برای کاهش سطح حمله است و باید همراه با احراز هویت دو مرحلهای، WAF، بهروزرسانیها و رمزهای قوی استفاده شود.
خلاصه و گام بعدی
مسدودسازی دسترسی کشورها با فایل .htaccess در وردپرس میتواند به کاهش اسپم، حملات brute-force و بار غیرضروری کمک کند اگر به درستی انجام شود. بهترین روش ابتدا تحلیل دادهها، محدودسازی هدفمند، پشتیبانگیری، تست و پایش لاگها است. برای نیازهای بزرگتر، راهکارهای CDN، WAF یا سرور معمولاً کاراتر هستند. اگر به دنبال زیرساخت امن، سریع و پایدار برای وردپرس هستید، میتوانید راهکارهای میزبانی، دامین و SSL هاستراگونز را بررسی و با برنامهریزی دقیق پیادهسازی کنید بررسی دامنه هاستینگ وردپرس.