Initial assessment without passwords Quote before intervention One accountable specialist from start to finish

Errors & Diagnosis

WordPress 403 Forbidden Error: Causes and Safe Fixes

A 403 means the server understood the request and refused it. Permissions, security rules and ownership are the usual reasons. Here is the safe order.

Short answer: the server received your request, understood it, and deliberately refused to serve it. That refusal comes from a permission, a security rule or an ownership problem — not from missing content.

Which 403 are you seeing?

  • Whole site: usually file permissions, ownership, or a server-level rule.
  • wp-admin only: typically a security plugin, an IP restriction, or a firewall.
  • One action only: often a bot-protection or mod_security rule misreading a legitimate request.
  • Uploads or assets: directory permissions or a hotlink-protection rule.

Narrowing this first saves time, because each variant has a different owner: your files, your plugins, or your host.

Check permissions and ownership

After a migration or a manual upload, wrong permissions or ownership are the classic cause. The safe baseline is directories 755, files 644, and wp-config.php at 640. Files must be owned by the web server’s user. Do not fix a 403 by setting anything to 777 — it usually works and leaves the site materially less safe.

Read the server log

The server error log normally states which rule or path caused the refusal — a mod_security rule ID, a denied directory, a blocked user-agent. That single line usually turns guesswork into a specific fix. If a security plugin is blocking your IP, look for its allowlist or a temporary-disable route (rename its folder in /wp-content/plugins) rather than deleting it.

Test from another network

Confirm whether other people or networks see the same 403; an IP-specific block affects only you and points at a firewall or security plugin, not the files. Re-test the exact URL and action from more than one network, and confirm the admin, media uploads and front end all behave normally before calling it fixed.

WP REPAIR INCIDENT STANDARD

How to narrow the fault without guessing

A 403 is an intentional refusal by one layer. Scope, server logs and the rule identifier distinguish filesystem ownership from firewall, security-plugin or application authorization failures.

WP RepairDiagnostic model
1Symptom2Evidence3Controlled change4Verification
Follow the chain until you find the first point that stops behaving as expected.
01

Determine whether the refusal affects one IP, route, method or the whole site.

02

Read the web-server, WAF or security-plugin log for the exact rule.

03

Verify effective owner, group, ACL and PHP user before changing permissions.

04

Test from another network and with a controlled request body.

What must be verified

  • The exact legitimate request succeeds from intended networks.
  • Unrelated security controls still block invalid requests.
  • Ownership and permissions survive the next deployment.

BEFORE YOU SEND THE REQUEST

Frequently asked questions.

Do you ask for passwords in the form?+

No. The public form never requests access. Secure credentials are requested only after the scope and quote are approved.

Who reviews the incident?+

The request goes to Jordi Ensenyat, founder of Code Barcelona and a WordPress specialist with more than 15 years of experience.

Is anything changed before the quote?+

No. Visible symptoms and scope are reviewed first. Intervention begins after approval and with a rollback path prepared.

Do you work internationally?+

Yes. WP Repair handles WordPress and WooCommerce incidents in English and Spanish through a remote service.

Assess my incident