HTTP 403 Forbidden
The server understood the request but refuses to fulfil it — different from 401 in that authentication won't help; you simply don't have permission.
Check a URL for HTTP 403
Paste any URL to see whether it currently returns 403. Runs a live HTTP probe and follows redirects.
TL;DR
A 403 means "the server understood your request and is refusing it" — not because you need to log in (that's 401) but because permission won't be granted regardless. Common causes: wrong file permissions, firewall blocking your IP, .htaccess deny rules, hotlink protection, or geo-restriction. Open the server error log to see the actual rule that triggered.
What does HTTP 403 mean?
HTTP 403 Forbidden means the server understood what you asked for and is deliberately refusing to serve it. This is fundamentally about authorisation, not authentication: it isn't saying "log in" (that's 401), it's saying "even if you did log in, you wouldn't get this." 403 covers a wide range of refusal scenarios — your IP is blocked, the file has the wrong permissions, the directory has indexing disabled, a hotlink protection rule fired, or a geo-restriction policy applied to your region. Unlike 451 (which specifically signals legal blocking), 403 doesn't tell you why — that's a deliberate design choice to avoid leaking information about server configuration.
Common Causes
- •File or directory permissions are wrong (chmod 000, owned by root, web user can't read)
- •Apache .htaccess "deny from all" or "Require all denied" rule
- •Nginx "deny" directive in the server block
- •IP-based firewall block (iptables, ufw, Cloudflare WAF, AWS security group)
- •Geographic restriction enforced at CDN or origin level
- •Hotlink protection blocking image requests with the wrong Referer header
- •Directory listing disabled when no index.html exists (Apache default)
- •WordPress wp-admin/wp-login.php access locked to specific IPs
- •API key valid but lacks the scope/permission for this endpoint
How to Fix It
- 1.Open the server access and error logs — they will show the exact rule that fired
- 2.Check file permissions: chmod 644 for files, chmod 755 for directories, and ensure the web user (www-data, nginx, apache) owns or can read them
- 3.Review .htaccess, nginx.conf, and any WAF rules for "deny" or "Require denied" directives
- 4.Check the Cloudflare / CloudFront / origin firewall for IP blocks — your home IP being blocked is a surprisingly common cause
- 5.For hotlink protection 403s: confirm the request Referer header matches your allowlist, or remove the rule if you no longer need it
- 6.If a previously-public page suddenly returns 403, check for recent config changes, plugin updates, or security-rule deployments
- 7.For API 403s: verify the auth token has the required scopes — most APIs return 403 when authentication succeeds but authorisation fails
SEO Impact
Pages returning 403 are not indexed by Google. If a previously-indexed page starts returning 403, Google removes it from search results within days to weeks. A sitewide 403 (often from a hosting suspension or firewall misconfig) deindexes the entire site fast. Google does not distinguish between "intentionally locked" and "accidentally locked" — both look like a content disappearance, which damages rankings. If you need to block access to staging or admin pages, use authentication (401) or robots.txt instead of 403 to avoid this signal.
History & Context
HTTP 403 was defined in the original HTTP/1.0 spec (RFC 1945, 1996) as the "I refuse to tell you why" status code. The deliberate vagueness was intentional: the spec authors wanted servers to be able to refuse access without leaking whether the resource exists, whether the user's credentials would work elsewhere, or what policy triggered the block. This makes 403 a security-by-obscurity tool — sometimes useful, sometimes a debugging nightmare.
Real-World Examples
WordPress wp-admin lockout
A common Wordfence or iThemes Security setting locks wp-admin and wp-login.php to specific IPs. Anyone else gets a 403. Common cause of "I can't log in to my own site" after switching ISPs or working from a hotel.
Cloudflare WAF block
Cloudflare's managed rules can return 403 when a request pattern matches a known attack signature — sometimes legitimate traffic gets caught (false positive). The Cloudflare dashboard's Security → Events log shows which rule fired.
AWS S3 bucket policy
S3 returns 403 (not 404) for missing objects when the bucket policy doesn't grant ListBucket — a security-conscious default that prevents bucket enumeration but confuses developers debugging missing-object issues.
Triaging 403 in Apache: where the rule lives
apache
# .htaccess deny rule — old syntax (Apache 2.2)
Order Deny,Allow
Deny from all
Allow from 1.2.3.4
# .htaccess deny rule — new syntax (Apache 2.4+)
<RequireAll>
Require all granted
Require not ip 1.2.3.4
</RequireAll>
# Quick triage on the server:
# tail -100 /var/log/apache2/error.log | grep -i "denied\|forbidden"
# 2024/01/15 10:22:11 [error] client denied by server configuration: /var/www/html/admin
#
# The "denied by server configuration" message tells you the rule fired —
# now grep your config for the matching path or directive.Frequently Asked Questions about HTTP 403
What does HTTP 403 mean?
HTTP 403 Forbidden means the server understood the request but is refusing to serve it. The refusal is not about authentication (which would be 401) — providing valid credentials will not help. Common causes: file permissions, firewall blocks, .htaccess rules, hotlink protection, or geo-restriction.
How do I fix an HTTP 403 error?
Check the server's error log first — it will show the specific rule that fired. Then verify (1) file and directory permissions (chmod 644/755), (2) .htaccess or nginx deny rules, (3) firewall and WAF rules blocking your IP, (4) hotlink protection misconfiguration. Most 403s are caused by recent config changes or plugin updates.
What is the difference between 401 and 403?
401 Unauthorized means "you need to authenticate" — log in and you'll get access. 403 Forbidden means "you are not allowed, regardless of authentication." 401 is about identity; 403 is about permission.
Why am I getting a 403 error on my own website?
Almost always one of: file permissions are wrong (the web server can't read the file), .htaccess contains a deny rule, your IP got added to a firewall block, a WordPress security plugin locked the area, or a hotlink protection rule blocked the request. Start with the server's error log — it names the rule.
How does 403 affect SEO?
Pages returning 403 are not indexed. Previously-indexed pages that start returning 403 get removed from search results. A sitewide 403 (often from a hosting suspension or firewall misconfig) can deindex the entire site within days. For private pages, use authentication or robots.txt — not 403 — to avoid the SEO damage.
What is the difference between 403 and 451?
403 is a generic permission refusal — could be any reason. 451 Unavailable For Legal Reasons specifically signals that a legal demand (court order, takedown, government block) is causing the refusal. Use 451 when censorship or legal blocking is the actual cause; use 403 for everything else.
Can a 403 error be caused by Cloudflare?
Yes — Cloudflare returns 403 when a WAF rule, IP access rule, country block, or Bot Fight Mode triggers. The Cloudflare dashboard's Security → Events log shows exactly which rule fired. A common false-positive pattern: aggressive WAF rules blocking legitimate API traffic from server-to-server integrations.
Why does S3 return 403 instead of 404 for missing objects?
It's a security-conscious default: if the bucket policy doesn't grant ListBucket permission, S3 returns 403 for both "object exists, no permission" and "object doesn't exist" — preventing attackers from enumerating bucket contents by probing for known filenames.
Related Status Codes
403 Forbidden on your platform
Same status code, different fix depending on where you host. Jump to a platform-specific deep dive:
Free Website Tools
Check your site for common issues that cause HTTP errors: