DriversRecommendedOutdated drivers can make a good PC feel brokenScan driver issues before chasing fixes manually.Scan NowOctober DealsAmazon USOctober deal check: compare before you payAmazon US: current deals, useful picks and tech finds.Check DealsWindows FixRecommendedWindows errors stealing your time? Find the fix fastScan stability, cleanup and performance issues.Fix Now×
Skip to content
VGSources
Blog

How to Fix the WordPress 403 Forbidden Error in wp-admin

A 403 on wp-admin is an access-control refusal, not automatically a bad password. Follow this reversible, evidence-first process to identify whether WordPress, permissions, .htaccess, a plugin, WAF or your host is blocking access.
Length10 min Posted Quest giverVGSources Team
Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

A 403 Forbidden response means an access-control layer rejected your request to /wp-admin/. The blocker may be WordPress’s account and role checks, file ownership or permissions, Apache/Nginx rules such as .htaccess, a security plugin or WAF, host authentication policy, or a damaged installation. The browser message alone cannot identify which layer refused access.

Work through the checks below in order. Start with a backup and the host error log, make only reversible changes, and ask your hosting provider to inspect server policy when the denial is not explained by WordPress settings.

As an Amazon Associate I earn from qualifying purchases.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

What a 403 on wp-admin actually means

HTTP status 403 means the server understood the request but refused to authorize it. It is different from a 404 (not found) and from a 500 (server-side failure). A 403 can be generated before WordPress loads, while WordPress is deciding whether your account may view a dashboard page, or by a firewall inspecting the request.

That is why valid credentials do not rule out a 403. An IP restriction in .htaccess, directory authentication, an ownership mismatch, ModSecurity, or a host-level policy can reject /wp-admin/ even when the username and password are correct. WordPress’s installation and hardening documentation lists server permissions, filesystem restrictions, security-policy denials, and .htaccess IP rules among possible causes.

Before changing anything: preserve evidence and narrow the scope

  1. Make a backup. Save the database and the site files, including the root .htaccess, wp-config.php, and wp-content. If your host provides snapshots, take one before editing rules or permissions.
  2. Record the exact request. Note the full URL, time, browser, your public IP address, and whether the response is a plain server page, a WordPress-styled page, or a branded firewall page. Save a screenshot and any request ID shown.
  3. Test the boundaries. Open the public homepage, /wp-login.php, and /wp-admin/ in a private browser window. Ask another trusted connection to test, if possible. A public site that works while only /wp-admin/ returns 403 points toward a directory rule, authentication policy, role check, or administrative security control.
  4. Do not repeatedly guess passwords. Login attempts can trigger rate limits or IP bans, making a security rule look like a permissions problem.

Step 1: confirm the account, role, and requested page

If the response is a WordPress message such as “You do not have permission to access this page,” confirm that you are signed in to the intended site and account. WordPress.com’s access guidance specifically recommends checking the signed-in account, plan, assigned role, and permissions. On a self-hosted site, verify that the user has the administrator role and that a membership or capability plugin has not removed the required capability.

Check for an account mix-up

  • Sign out, clear the site’s cookies, and sign back in at the site’s own /wp-login.php address rather than through a saved dashboard bookmark.
  • Check the browser address bar for the correct domain, subdomain, and scheme (HTTP versus HTTPS). A bookmark to a staging or old domain can lead to a different WordPress installation.
  • Try a second administrator account only if you already have one and can do so safely. Do not create or elevate an account while access controls are still unexplained.

Distinguish a page-capability error from a directory denial

If /wp-login.php loads and authentication succeeds but every dashboard URL receives a server-generated 403, the web server or a security layer is more likely than a WordPress role check. If the dashboard shell loads but one settings page is denied, inspect role and capability changes, membership plugins, and the specific page’s URL.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Step 2: read the host error log before editing files

Ask your host for the web-server error entry at the exact time of the failed request, or open the control panel’s Apache/Nginx error log if you have access. Useful phrases include authz, “directory index forbidden,” “client denied,” “permission denied,” ModSecurity, a rule ID, SELinux denial, or an authentication-provider failure.

The log tells you which layer rejected the request. A filesystem “permission denied” entry calls for ownership or mode checks; an authz or IP-deny entry points to server rules; a ModSecurity rule ID points to a WAF false positive. A clean WordPress PHP log with no corresponding web-server entry can indicate that the request never reached PHP.

What to give support

  • The exact URL and UTC/local time of the 403.
  • Your public IP address and whether another network receives the same response.
  • The response headers or request ID, if displayed.
  • Whether the public site and /wp-login.php work.
  • Any changes immediately before the problem: plugin update, host migration, SSL change, firewall rule, or account move.

Step 3: inspect .htaccess and other server rules safely

On Apache hosting, the root .htaccess can deny an IP range, require authentication, or contain a malformed directive. WordPress normally writes rewrite rules to the root file; it does not normally create a second .htaccess inside wp-admin. An extra file in that directory may have been added by a security tool or host policy.

Make a reversible test

  1. Use SFTP, SSH, or the host file manager to download the root .htaccess.
  2. Rename it to a dated backup such as .htaccess.before-403. Renaming, rather than deleting, preserves the evidence.
  3. Test the public site and /wp-admin/. If the 403 disappears, compare the backup for Deny, Require, IP allow/deny lists, basic-auth directives, or accidental syntax.
  4. Regenerate standard WordPress rewrite rules only after access returns: in the dashboard, visit Settings → Permalinks and select Save Changes without changing the structure. If you cannot reach the dashboard, have the host validate the file and Apache configuration.

Do not copy a generic .htaccess from another site. Custom caching, authentication, multisite, and host directives may be required. If the host uses Nginx, .htaccess is not read; the equivalent location, deny, and authentication rules live in the Nginx configuration and must be checked by the provider.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Step 4: verify ownership, permissions, and security policy

WordPress files must be readable by the web-server/PHP process, while write access should be limited to what the hosting arrangement requires. WordPress hardening guidance gives common examples of mode 755 for directories and 644 for files. Those values are examples, not a universal repair: the correct owner, group, PHP handler, and SELinux context depend on the host.

Typical diagnostic commands

After taking a backup and confirming the site path, an administrator can inspect modes and owners with:

ls -ld /path/to/site /path/to/site/wp-admin
find /path/to/site/wp-admin -maxdepth 2 -printf '%M %u:%g %pn' | head

WordPress’s hardening examples use these patterns for ordinary files and directories:

find /path/to/site -type d -exec chmod 755 {} ;
find /path/to/site -type f -exec chmod 644 {} ;

Do not run those commands blindly on a managed, multisite, or security-hardened installation. First confirm the provider’s documented owner and group. A PHP process that runs as a separate account may need group access, and an SELinux policy can deny an operation even when Unix mode bits look correct. As WordPress documentation notes, actions denied by security policy are often difficult to distinguish from ordinary file-permission errors.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Common permission mistakes

  • The wp-admin directory is owned by root after a migration, while the site’s PHP account is different.
  • A deployment changed directories to 700 or files to 600, blocking the web-server process.
  • The directory is readable, but a parent directory lacks execute permission, so the server cannot traverse the path.
  • SELinux labels or a host security context were lost during an archive restore.

Correct ownership through the host’s control panel or support team when possible. Changing ownership to a guessed username, or making the entire installation world-writable, can create a security problem and still fail to fix the denial.

Step 5: isolate plugins without wp-admin

A plugin can deny administrator requests, add an IP restriction, or trigger a firewall rule. WordPress’s common-errors guidance recommends deactivating all plugins to test whether a plugin is responsible. You can do that without dashboard access.

Using SFTP or the host file manager

  1. Open the site’s wp-content directory.
  2. Rename plugins to plugins.off. This prevents WordPress from loading the installed plugins because the expected directory is absent.
  3. Test /wp-admin/ and /wp-login.php.
  4. If access returns, rename plugins.off back to plugins. WordPress will mark the plugins inactive; restore them one at a time and test after each activation.

Using SSH and WP-CLI

If WP-CLI is installed and can bootstrap the site, list plugins first:

wp plugin list --status=active

To deactivate all plugins from the site directory:

wp plugin deactivate --all

If WP-CLI itself cannot load because a plugin crashes early, use the directory rename method. Do not delete plugin folders until you have a backup and have identified the offending component. A plugin that blocks only one IP or URL may require reviewing its settings or allowlist rather than permanent removal.

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Step 6: review security-plugin and WAF events

Security plugins and web-application firewalls are designed to refuse suspicious requests, so they can be both the protection and the source of a false-positive 403. ModSecurity is a commonly deployed open-source WAF. Its event should include a rule ID, request details, and sometimes the matched parameter.

Use the event, not guesswork

  • Open the security plugin’s activity or firewall log through its own interface, database tools, or host panel.
  • Match the event time, URL, source IP, and rule ID to your failed request.
  • Determine whether the request was an administrator login, an AJAX call, a REST request, or a media/upload operation. A broad allow rule can expose more than the failing action needs.
  • Allow only the minimum legitimate request, IP, or rule exception. Keep the original rule and document the change.

Do not permanently disable a firewall simply because the dashboard is inaccessible. If you must temporarily disable a control to recover access, do so through the provider’s documented emergency procedure, restrict access by a trusted network where possible, and restore protection immediately after identifying the false positive.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Step 7: ask the host to check policies you cannot see

Some denials exist outside the account’s files. Request a review of:

  • Apache Require/authz directives, Nginx location rules, and directory authentication.
  • ModSecurity or another WAF’s event and rule ID.
  • Filesystem owner/group, parent-directory traversal, and PHP-FPM or web-server user.
  • SELinux or another mandatory-access-control denial.
  • Recent account moves, IP bans, malware rules, or changes to the hosting security policy.
  • Whether mod_rewrite is enabled on Apache and whether the Nginx equivalent is correctly configured.

WordPress’s installation FAQ recommends host support when visible settings appear correct. Provide the evidence collected in the earlier steps instead of asking support to “fix WordPress” without a timestamp; that lets them search the right log line.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Step 8: consider a damaged or compromised installation

If the block remains after plugin isolation, .htaccess review, permission checks, and host-policy inspection, treat repeated or unexplained denials as a possible compromise. WordPress’s common-errors guidance notes that a site may have been hacked after those checks.

  1. Preserve server, WAF, and login logs before rotating or deleting files.
  2. From a trusted computer, change hosting, database, SSH/SFTP, and administrator credentials; use unique passwords and multifactor authentication where available.
  3. Compare core files with a known-clean copy of the same WordPress version. Do not overwrite wp-content or wp-config.php without a recovery plan.
  4. Scan the files and database using a reputable security process, or engage qualified incident-response help when payment, personal, or account data may be exposed.
  5. Restore from a known-clean backup if integrity cannot be established, then update WordPress, themes, and plugins before reopening access.

A recurring 403 that moves between accounts or IP addresses, unexplained administrator accounts, modified core files, or new server rules are stronger compromise indicators than a single block immediately after a plugin update.

Choose the least risky remedy

Remedy Where the denial occurs Access needed Reversible? Security trade-off
Confirm account and role WordPress authorization Login or another administrator Yes Low; changing roles without evidence can overgrant access
Rename the plugins directory Plugin or plugin firewall SFTP, SSH, or file manager Yes Plugins are inactive while testing; protection may be reduced briefly
Back up and rename .htaccess Apache rewrite, IP, or auth rule SFTP, SSH, or file manager Yes Custom redirects and restrictions may stop until rules are restored
Correct owner/mode Filesystem or PHP access Provider-approved shell or control panel Usually, if recorded first Overly broad write permissions increase exposure
Adjust one WAF rule Security plugin or host WAF Firewall log or host support Yes, if documented A broad exception can let malicious requests through
Host-policy review Server, SELinux, or account policy Host support and logs Depends on provider Changing policy without understanding scope can affect every site on the account

Common mistakes that make a 403 worse

  • Making everything 777: This grants unnecessary write access and does not fix an SELinux, WAF, or IP-deny rule.
  • Deleting .htaccess or plugin folders: Deletion destroys evidence and makes rollback harder. Rename and preserve backups instead.
  • Disabling every security control indefinitely: Use a narrow, time-limited exception tied to a logged event.
  • Regenerating permalinks repeatedly: That changes rewrite rules but cannot fix ownership, host authentication, or a firewall block.
  • Assuming a login failure is a role problem: A server-generated 403 can occur before WordPress sees the account.
  • Ignoring a provider migration: Ownership, PHP-FPM users, SELinux labels, and Nginx rules often change during a move.

Prevent the next wp-admin denial

  • Keep dated backups of .htaccess, configuration, and the database before updates or migrations.
  • Record which account owns the files and which user runs PHP; retain the host’s approved permission guidance.
  • Monitor WAF and security-plugin logs so a blocked administrator IP can be distinguished from a credential attack.
  • Use a separate staging test for plugin and firewall changes, and make one change at a time in production.
  • Limit administrator accounts, remove unused users, and use multifactor authentication.
  • Keep WordPress core, themes, plugins, PHP, and the host operating system supported and updated.

When to stop troubleshooting and escalate

Contact the host immediately when the public site is also unavailable, the error log shows SELinux or account-policy denials, you lack SFTP or log access, or a change to permissions could affect other sites. Escalate to a security professional when logs show unauthorized changes, malware indicators, repeated rule manipulation, or possible exposure of sensitive data. A precise timestamp, URL, source IP, response body, and list of reversible tests will shorten both support and incident-response time.

Sources and terminology

The guidance here follows the WordPress Developer Resources Advanced Administration Handbook sections on hardening, file permissions, installation troubleshooting, and common errors, plus WordPress.com’s account-access guidance. Those references distinguish ordinary Unix permissions from mandatory security policy and recommend plugin deactivation and host support when local checks do not explain the refusal.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

Leave a Reply

Your email address will not be published. Required fields are marked *

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

More quests from Patch Notes

  1. How to Set Up a RedM (RDR2) Server in 2026: License Key, txAdmin and server.cfg, Step by StepBlog11min
  2. Best RedM (RDR2) Server Hosting in 2026: Comparing Four Hosts on Slots, Memory and PriceBlog10min
  3. How to Host a Mindustry Server in 2026: server-release.jar, Port 6567 and the Commands That MatterBlog7min
Recommended PC Tool
Recommended PC Tool
Windows Errors? Fix Them Before They SpreadFree repair scan
Outdated Drivers Are Slowing You DownFree scan - exact matches

Two free Windows tools

One Free Minute Could Fix That PC

Before you go - each of these free tools takes about a minute and tackles what quietly slows a Windows PC down.

Special offer. View Outbyte info, uninstall instructions, EULA, and Privacy Policy.