Skip to main content

403 Forbidden error on your website: how to find the cause and fix it

Published on November 9, 2026 11 min read

Getting a 403 Forbidden error on your website or in WordPress? Learn where it comes from and fix the cause step by step in Plesk.

Illustration of a woman holding a magnifying glass next to a stack of files and a man turning a dial on a server cabinet, with a large browser window between them shaped like a gate and closed by an orange and white barrier arm

A 403 Forbidden error means the server found the page but refuses to show it. On LJPc hosting the cause is almost always in your website or in the settings of your domain: a rule in .htaccess, a WP Toolkit or plugin security measure, file permissions, a missing index file or the PHP setting run PHP as. The error page and the Plesk log tell you which one it is, and in most cases you can fix it yourself.

Below you learn how to recognise a 403, where to find the cause and how to fix each cause. New to Plesk? Start with the Plesk control panel guide.

What does 403 Forbidden mean?

The server answers every request from your browser with a status code. A 403 means the server understands the request but will not give you access. That is different from a page that does not exist or a server that crashes. This table helps you tell the errors apart.

A 403 compared with errors that look similar.
What you seeWhat it meansRead more
403 ForbiddenThe file or page exists, but the server or your website refuses to show itThis article
401 Unauthorized, or a window asking for a username and passwordThe folder is password protectedSet up .htaccess: redirects, security and more
404 Not FoundThere is no file at that addressHow to use the Plesk File Manager
500, 502, 503 or a blank pageAn error in PHP, a plugin or .htaccessHow to view error logs in Plesk
This site can't be reached, with ERR_CONNECTION_REFUSEDYou cannot connect to the server at all, often because your IP address is blockedIP address blocked?

Where does the 403 come from? Check the error page first

The text on the error page shows who refuses access: the web server, a plugin in your website or a service in front of your website.

How to tell where a 403 comes from.
What the page saysWhere the 403 comes fromWhat to do
Access to this resource on the server is denied!, with Proudly powered by LiteSpeed Web Server at the bottomThe web server. Your site runs on a LiteSpeed serverFind the cause in the list of causes below
You don't have permission to access this resource., with Apache Server at yourdomain.com at the bottomThe web server. Your site runs on an Apache serverFind the reason in the log and in the list of causes below
You do not have permission to access this document., with the LJPc hosting logoThe web server, with the standard LJPc hosting error pageFind the cause in the list of causes below
A potentially unsafe operation has been detected in your request to this siteThe firewall of the Wordfence WordPress pluginSee a security plugin or Cloudflare blocks you
A Cloudflare page with a Cloudflare Ray ID at the bottomCloudflare, if your domain runs through CloudflareSee a security plugin or Cloudflare blocks you
An error page in the style of your own websiteYour website shows its own error page; the block itself can come from the server or from a pluginFind the reason in the log

You can also check which web server your site uses in your browser. Press F12, open the Network tab, reload the page and click the top line. If Response Headers shows server: LiteSpeed, your site runs on LiteSpeed. With server: nginx it runs on Apache, with nginx in front.

Find the cause in the Plesk log

The log of your website shows which addresses returned a 403. On an Apache server it also shows why.

  1. Open Plesk from the customer portal. See open Plesk from the customer portal for how it works.
  2. Go to Websites & Domains and click the Dashboard tab in your domain's card.
  3. Under Dev Tools, click Logs.
  4. In the filter row, filter Code on 403. You now see only the requests that got a 403, with the blocked address in the Message column.
  5. Not sure which line is yours? Click Start real-time updates and reload the page with the 403. The IP filter narrows the list to your own IP address.
  6. Clear the Code filter, choose Apache error under All logs in the top right and search Message for denied.
Apache error log messages behind a 403.
MessageWhat it means
AH01630: client denied by server configurationA rule denies access: in .htaccess or a WP Toolkit security measure
AH01276: Cannot serve directory ...: No matching DirectoryIndex ... foundThe folder has no index file, such as index.php or index.html
A line with Permission deniedThe web server is not allowed to read the file or folder

On a LiteSpeed server the reason for a 403 usually does not appear in the log. The Code filter still shows the blocked address, and the address and time are often enough to find the cause below. Read more in how to view error logs in Plesk.

Common causes and how to fix them

Where to look for which 403.
What happensMost likely cause
Your whole site or every PHP file returns a 403, while images and HTML loadThe run PHP as setting
Your main domain or a folder returns a 403A missing index file
One file or folder returns a 403 after uploadingFile permissions
A 403 after editing .htaccess, or on an installer scriptA rule in .htaccess
xmlrpc.php, a PHP file in wp-content/uploads or an SEO tool gets a 403A WP Toolkit security measure
A 403 when saving in WordPress or on one specific actionA security plugin or Cloudflare
Sudden 403 errors in many places, without any change on your sideFiles that should not be there

Your whole site or every PHP file returns a 403

Do images and HTML pages load, while every PHP file returns a 403, including a file you uploaded a moment ago? And does a PHP file that does not exist return a 404? Then run PHP as is probably set to an FPM application while your site runs on a LiteSpeed server. On our LiteSpeed servers, PHP runs as FastCGI application. To fix it:

  1. In Plesk, open your domain's Dashboard and click PHP under Dev Tools.
  2. Check run PHP as. If it shows an option with FPM application, choose FastCGI application served by Apache.
  3. Leave the PHP version as it is and click OK at the bottom.
  4. Reload the PHP file.

On our Apache servers FPM application is the standard and works well. If your site returns a 403 on PHP files there, the cause is elsewhere: switch back to your previous choice and check the log. More about this page in how to change the PHP version in Plesk.

Your main domain or a folder returns a 403

A 403 on yourdomain.com or yourdomain.com/folder often means an index file is missing. The server does not show a folder without index.php or index.html, so nobody can browse the list of your files. In the Apache error log you recognise it by AH01276.

  • Are your files in a subfolder, for example because your zip file contained a folder? Move them into httpdocs itself.
  • Is your index.html or index.php gone? Restore it from the File Manager Recycle Bin or from a backup.

How to move and restore files is explained in how to use the Plesk File Manager.

One file or folder returns a 403 after uploading

If the web server is not allowed to read a file or folder, you get a 403. This mostly happens after uploading with a program that sets its own permissions. Set files to 644 and folders to 755; the Plesk File Manager guide shows how. Never use 777: it lets anyone change the file.

A rule in .htaccess denies access

An .htaccess file can deny visitors, IP addresses or file types. Look for rules such as Require all denied, Require not ip, Deny from all or a RewriteRule ending in [F]. An .htaccess in a parent folder also applies to every folder below it. A well-known example is the Drupal .htaccess: it denies PHP files in subfolders that are not part of Drupal, including an installer script you upload to a subfolder yourself.

  1. Open File Manager and turn on Show system files and directories under More > View Options, so .htaccess becomes visible.
  2. Download .htaccess to your computer as a backup.
  3. Remove the rule that denies access and save the file.
  4. Not sure which rule it is? Rename the file temporarily, for example to .htaccess-off, and test again. If it works, the cause is in that file. Give it its original name back straight away, because without .htaccess the links to your WordPress pages stop working, and change only that one rule.

How .htaccess works and how to deny IP addresses yourself is explained in set up .htaccess: redirects, security and more.

WordPress: a WP Toolkit security measure

WP Toolkit in Plesk has security measures that deny certain requests with a 403. They protect your site, so only turn off the measure you really need to.

WP Toolkit measures that can return a 403.
What gets a 403The WP Toolkit measure
xmlrpc.php, for example for Jetpack or an app that uses XML-RPCBlock access to xmlrpc.php
A PHP file in wp-content/uploadsForbid execution of PHP scripts in the wp-content/uploads directory
A PHP file in wp-includes opened directlyForbid execution of PHP scripts in the wp-includes directory
SEO tools and scanners such as Ahrefs, Semrush and Majestic, or a script using python-requestsEnable bot protection
An address with ?author=1, the author page by author numberBlock author scans
Files ending in .log, .ini, .sh, .exe, .bat, .cmd, .csh or .psdBlock access to potentially sensitive files

Googlebot and Bingbot are not on the bot protection list, so Google and Bing keep crawling your site.

  1. In Plesk, click WordPress in the left menu and find your site's card.
  2. Click the message under Security, for example Critical security measures applied.
  3. Select only the measure that causes the 403 and click Revert.
  4. Test again. To turn the measure back on later, select it and click Secure.

Prefer to keep the measure? Put the file somewhere else instead. A PHP script does not belong in wp-content/uploads, for example.

A security plugin or Cloudflare blocks you

Security plugins such as Wordfence stop requests that look like an attack. Sometimes that hits a normal action, such as saving a page that contains code. Wordfence then shows A potentially unsafe operation has been detected in your request to this site.

  • Are you an administrator and sure it is a false alarm? Tick I am certain this is a false positive. on that page, click Allowlist This Action and repeat your action.
  • Other security plugins keep their own log in WordPress, showing what was blocked and why.
  • Locked out of WordPress? Rename the plugin's folder in wp-content/plugins with File Manager, for example to pluginname-off. WordPress then deactivates the plugin. Rename the folder back once you are in again.

Is there a Cloudflare Ray ID at the bottom of the error page? Then Cloudflare blocks the request. Look up that Ray ID under Security Events in your Cloudflare account to see which rule blocked it.

Sudden 403 errors in many places, without any change on your side

Do you suddenly get a 403 on wp-admin or on many pages, and are there .htaccess files in folders where you never put them? Your site may be infected. Some malware places an .htaccess in many folders that denies PHP files, so only the attacker's own scripts keep working. See what to do in malware alert from LJPc.

Still stuck? Send us this

Create a support ticket in the customer portal and we will look into it for you. Include:

  • the full address that returns the 403, for example https://yourdomain.com/contact.php;
  • the date and time you saw the 403;
  • your IP address at that moment, found as described in IP address blocked?;
  • a screenshot of the error page;
  • what changed right before, such as an upload, an update, a new plugin or a migration.

With the address, the time and your IP address we find the request in the server logs and work out what blocks it.

Frequently asked questions

Does a 403 mean my IP address is blocked?

Usually not. When our server protection blocks your IP address after too many failed logins, you cannot connect at all and see an error such as ERR_CONNECTION_REFUSED. If you do get a 403 page, the server is answering. A 403 that only affects your IP address comes from a rule in .htaccess or from a security plugin in your website.

Is an LJPc firewall blocking my PHP script?

The firewall and fail2ban on our servers stop attackers before a connection is made; they do not return a 403. A 403 on a PHP script comes from your domain settings or your website itself, such as run PHP as, a rule in .htaccess, a WP Toolkit measure or a security plugin. If you cannot find the cause, send us the address and the time and we will look into it.

Why does xmlrpc.php return a 403?

The WP Toolkit security measure Block access to xmlrpc.php is turned on. It protects your site against attacks through XML-RPC. If you use a service that needs XML-RPC, such as Jetpack, turn off only this measure with Revert under Security on your site's card.

Why do SEO tools like Ahrefs or Semrush get a 403 while Google does not?

The WP Toolkit measure Enable bot protection denies a fixed list of bots, including AhrefsBot, SemrushBot and the Majestic bot. Googlebot and Bingbot are not on that list. To let an SEO tool scan your site, turn the measure off temporarily and back on afterwards with Secure.

Can I set my files to 777 to fix a 403?

No. With 777 anyone on the server can change the file, which is a serious security risk. Set files to 644 and folders to 755; that gives the web server everything it needs to read.

Can I show visitors my own 403 page?

Yes. With the line ErrorDocument 403 /403.html in .htaccess, the server shows your own page instead of the standard error page. The .htaccess article explains how.

Prefer to talk to someone?

We are also happy to answer your questions personally. Schedule a free consultation or call us directly. We are glad to think along with you.

Stay up to date with recent developments! Subscribe and receive our newsletter Signing up...