خطای 403 Forbidden یعنی سرور درخواست شما را فهمیده، ولی اجازه دسترسی نمیدهد. برخلاف 404 که فایل پیدا نشده، در 403 فایل یا صفحه وجود دارد اما قانونی مانع نمایش آن شده است. رایجترین دلایل در سایتهای وردپرسی و سرورهای لینوکسی چهار مورد است: دسترسی نادرست فایلها، نبودن فایل index در پوشه، قانون در .htaccess یا تنظیم وبسرور، و مسدود شدن آدرس شما توسط فایروال یا افزونه امنیتی.
این راهنما ترتیب بررسی را از سریعترین و رایجترین دلیل شروع میکند. اگر بهجای 403 خطای دیگری میبینید، خطای 500 Internal Server Error و خطای 502 Bad Gateway را ببینید.
پیش از شروع: خطای 403 Forbidden برای همه است یا فقط شما؟
از یک شبکه دیگر (مثلاً داده موبایل) سایت را باز کنید.
- اگر برای شما 403 است ولی از شبکه دیگر باز میشود، آدرس شما مسدود شده (فایروال، Fail2ban، افزونه امنیتی یا قانون Cloudflare).
- اگر از همه جا 403 است، مشکل از دسترسی فایل، تنظیم وبسرور یا قانون روی خود سایت است.
لاگ وبسرور دقیقترین منبع است:
sudo tail -n 50 /var/log/nginx/error.log
sudo tail -n 50 /var/log/apache2/error.logپیامهایی مثل directory index of ... is forbidden، Permission denied یا client denied by server configuration علت را مستقیم میگویند.
علت اول خطای 403 Forbidden: دسترسی و مالکیت فایل
وبسرور باید بتواند فایل را بخواند و به همه پوشههای مسیر آن وارد شود (دسترسی x). قاعده معمول برای سایت:
sudo find /var/www/example.com -type d -exec chmod 755 {} \;
sudo find /var/www/example.com -type f -exec chmod 644 {} \;
sudo chown -R www-data:www-data /var/www/example.comنام کاربر وبسرور در توزیعها فرق دارد (www-data، apache یا nginx). مقدار 777 را برای رفع مشکل نگذارید؛ مشکل را پنهان میکند و ریسک امنیتی میآورد. دستور namei -l /var/www/example.com/index.php دسترسی تکتک پوشههای مسیر را نشان میدهد. توضیح دسترسیها در مدیریت دسترسی در لینوکس آمده است.
علت دوم: نبودن فایل index
اگر در پوشه سایت فایل index.php یا index.html نیست و فهرستنمایی پوشه هم خاموش است، پیام 403 میآید. بررسی کنید فایل وجود دارد و نام آن با تنظیم وبسرور همخوان است.
در Nginx:
index index.php index.html;در Apache:
DirectoryIndex index.php index.htmlاگر وردپرس را تازه منتقل کردهاید، شاید فایلها داخل یک پوشه اضافه قرار گرفتهاند؛ مسیر root در تنظیم سایت را بررسی کنید. مراحل کامل انتقال در انتقال سایت وردپرس به هاست جدید آمده است.
علت سوم: قانون در .htaccess یا تنظیم وبسرور
در Apache، فایل .htaccess ممکن است قاعدهای مثل Deny from all یا Require all denied داشته باشد. برای آزمایش، فایل را موقتاً تغییر نام دهید:
mv .htaccess .htaccess.offاگر سایت باز شد، علت داخل همان فایل بود. برای وردپرس میتوانید از «تنظیمات > پیوندهای یکتا» و ذخیره، فایل تازهای بسازید. در Nginx، دستورهای deny all یا allow در بلوک location را بررسی کنید و بعد از تغییر:
sudo nginx -t
sudo systemctl reload nginxدر Apache 2.4 به بعد، دستور Require با Allow/Deny قدیمی فرق دارد و ترکیب هر دو در یک فایل خطا میدهد. کانفیگ وبسرور در کانفیگ وب سرور لینوکس و نصب Nginx در نصب Nginx روی اوبونتو توضیح داده شده است.
علت چهارم: مسدود شدن آدرس شما
اگر فقط خودتان 403 میگیرید:
- فایروال سرور یا افزونه امنیتی وردپرس چند ورود ناموفق را شمرده و آدرس را مسدود کرده است.
- Fail2ban آدرس را بن کرده. بررسی با
sudo fail2ban-client status sshdو باز کردن باsudo fail2ban-client set sshd unbanip 203.0.113.5. راهاندازی آن در نصب و تنظیم Fail2ban آمده است. - قانون WAF یا Cloudflare درخواست را رد میکند. در داشبورد Cloudflare بخش Security Events را ببینید.
- ModSecurity یک درخواست را بهاشتباه تهدید فرض کرده؛ در
modsec_audit.logقاعده مسبب را میبینید.
آدرس عمومی خودتان را با ابزارهای آنلاین شبکه و سرور ببینید تا آدرسی را که با آن به سرور میرسید پیدا کنید.
علت پنجم: وردپرس و افزونهها
- افزونه امنیتی یا کش قانون اشتباه در
.htaccessنوشته. پوشه افزونهها را موقتاً تغییر نام دهید تا آزمایش شود:mv wp-content/plugins wp-content/plugins.off - فقط در wp-admin 403 میگیرید: ممکن است ورود به آن به IP خاصی محدود شده باشد.
- بعد از بروزرسانی یا انتقال، دسترسی فایلها عوض شده است.
علت ششم: SELinux
در AlmaLinux و Rocky، SELinux ممکن است دسترسی وبسرور را حتی با دسترسی درست فایل ببندد. نشانه، پیام AVC در /var/log/audit/audit.log است:
sudo ausearch -m avc -ts recent
sudo restorecon -Rv /var/www/example.comدستور restorecon برچسب درست SELinux را به فایلها برمیگرداند. بهجای خاموش کردن کامل SELinux، همین روش را به کار ببرید.
جدول عیبیابی سریع
| نشانه در لاگ یا رفتار | علت محتمل | راه حل |
|---|---|---|
Permission denied | دسترسی یا مالکیت فایل | chmod و chown درست |
directory index ... is forbidden | نبود فایل index | ساخت یا معرفی index |
client denied by server configuration | قانون Require یا deny | بررسی کانفیگ و .htaccess |
| فقط شما 403 میگیرید | مسدود شدن IP | بررسی فایروال، Fail2ban، WAF |
| فقط wp-admin | قانون محدودکننده یا افزونه امنیتی | بررسی تنظیم محدودیت ورود |
| 403 با پیام AVC | SELinux | restorecon |
سوالات متداول
فرق 403 و 401 چیست؟
401 یعنی احراز هویت لازم است (نام کاربری و رمز). 403 یعنی درخواست فهمیده شده ولی اجازه دسترسی ندارید.
آیا 403 روی سئو اثر دارد؟
اگر ربات گوگل 403 بگیرد، صفحه ایندکس نمیشود. بررسی کنید فایروال یا Cloudflare رباتهای مجاز را مسدود نکرده باشد.
چطور بفهمم مشکل از فایروال است یا فایل؟
از شبکه دیگر امتحان کنید و لاگ خطا را بخوانید. مسدودیت فایروال و مشکل دسترسی فایل پیامهای متفاوتی در لاگ میگذارند.
بعد از رفع مشکل هنوز خطا میبینم
کش مرورگر، افزونه کش وردپرس و Cloudflare را پاک کنید. خطا ممکن است در کش مانده باشد.





