A 403 response means the request was understood but access was refused. The refusal may come from a CDN, hosting firewall, web server, or WordPress plugin. The first task is to identify which layer rejected the request.
Record where the error occurs
Write down the affected URL, timestamp and timezone, visitor IP if appropriate, and exact action. Is the homepage blocked, only wp-admin, one image, or a form submission? Try a logged-out browser and a different network to distinguish an account or IP restriction from a site-wide problem.
Use the symptom to narrow the investigation
- Only one visitor or network: inspect IP blocks, rate limits, and security challenge rules.
- Only a save or submission request: check security logs for a WAF or ModSecurity rule matching the submitted content.
- Only images or files: inspect permissions, ownership, hotlink protection, and CDN rules.
- A directory URL: the server may intentionally deny directory listing when no index file exists.
- After a migration: check file ownership and server access configuration before blaming WordPress plugins.
1. Inspect firewall and server logs
Ask the host or CDN administrator to find the request at the recorded time. A rule ID or matching log entry is more useful than a generic suggestion to disable security. If a rule is a false positive, request a narrowly scoped exception and retest.
2. Check permissions and ownership
Common WordPress baselines are 755 for directories and 644 for files, but the correct values depend on hosting ownership and execution settings. Files such as wp-config.php may need stricter permissions. Confirm your host’s requirements before changing anything recursively.
Do not use 777 as a repair. Changing permission numbers will not fix an ownership mismatch by itself.
3. Review access rules
On Apache-compatible hosting, inspect a backed-up copy of .htaccess for deny rules or recent changes. Preserve authentication, redirects, and security directives. Do not simply replace the entire file: it can contain rules beyond WordPress permalinks.
Nginx does not use this file; its access rules must be checked in server configuration. Saving WordPress permalinks cannot fix a CDN or Nginx denial.
4. Test a suspected plugin on staging
If logs implicate a security plugin or access customization, isolate it on a staging copy. Disabling every plugin on a live store can interrupt checkout, subscriptions, and forms. If emergency live investigation is necessary, coordinate the change and restore protection promptly.
Verify the fix
Repeat the original request, check unrelated pages and wp-admin, and review logs for new denials. Confirm protection remains active and that the change did not expose an intentionally private resource. Document the rule or setting changed so the fix can be reviewed later.
For related server-rule work, see WordPress redirects. Reference: WordPress file permissions guidance.
Need help implementing this?
Explore my WordPress development services or send your website URL and requirements for a scoped implementation and verification.
Need help fixing this on your website?
Need help fixing this on your website? Chat with me on WhatsApp.
