"Forbidden. You don't have permission to access this resource." A 403 means something between the visitor and WordPress looked at the request and refused it on purpose. That something is not always the same thing: the web server, the host's firewall, a security plugin, Cloudflare, or a password lock on a folder. The fix depends entirely on which one said no, so the first job is finding out who it was. Below is a rebuilt example (not a real client), then how to tell the five apart and what fixes each.
/wp-admin and /wp-login.php, only when you press Save or Update, or only on images. Each points at a different cause in the table below..htaccess file in the site's main folder: in the host's File Manager rename it to .htaccess-old and reload. If the site comes back, log in and press Save in Settings, Permalinks to write a clean one, then look in the old file for lines such as Deny from all, Require all denied or Require ip that a plugin or tutorial left. Second, the main folder has no index.php: after a host move the files are often sitting one folder too deep (for example public_html/site-backup/), and a server with no front page to show refuses with a 403. Move them up a level. Third, permissions: folders should be 755 and files 644 (wp-config.php may be 640 or 600). A folder at 700 or a file at 600 that the server must read gives a 403; ask the host to reset ownership if files were copied in as the wrong user.wp-content/plugins (for example wordfence to wordfence-off), log in, rename it back, then remove your address from its block list and check what triggered it.SecFilterEngine Off into .htaccess from an old tutorial: modern servers do not accept it and some answer with a 500 error instead.wp-admin. You normally see a password box first, and cancelling it gives a 403 or 401. Remove the lock or use its password.www versus non-www mix-up. Add both versions of the domain to its allowed list./wp-login.php and an image address, from your computer and from the phone on mobile data, and save one draft post.| What you see | Who refused | Usual fix |
|---|---|---|
| Plain "Forbidden. You don't have permission to access this resource" on every page | Web server | Rename .htaccess, check index.php is in the main folder, folders 755 and files 644 |
| Same page, right after a host move | Web server, no front page | Files are one folder too deep: move them up |
403 only on /wp-admin or /wp-login.php, site works on mobile data | Security plugin or a block on your address | Unlock link, or rename the plugin folder to get in |
| 403 when pressing Save, Update or Publish | Host firewall rule (mod_security) | Host allows the rule for your site, given the time and page |
| "Sorry, you have been blocked" with a Ray ID | Cloudflare | Security, Events, search the Ray ID, adjust that rule |
| "Access Denied" with a firewall company's name | A firewall service in front of the site | Its dashboard's block log, or its support |
| Images broken, pages fine | Hotlink protection | Add both domain versions to the allowed list |
Most 403s are one of the first three rows and are fixed in minutes once you know who sent them. If the host, the plugin and Cloudflare each say it is not them, that is what the box below is for. Related: "too many redirects" and a login page that keeps reloading.