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.
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.
| What you see | What it means | Read more |
|---|---|---|
| 403 Forbidden | The file or page exists, but the server or your website refuses to show it | This article |
| 401 Unauthorized, or a window asking for a username and password | The folder is password protected | Set up .htaccess: redirects, security and more |
| 404 Not Found | There is no file at that address | How to use the Plesk File Manager |
| 500, 502, 503 or a blank page | An error in PHP, a plugin or .htaccess | How to view error logs in Plesk |
| This site can't be reached, with ERR_CONNECTION_REFUSED | You cannot connect to the server at all, often because your IP address is blocked | IP 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.
| What the page says | Where the 403 comes from | What to do |
|---|---|---|
| Access to this resource on the server is denied!, with Proudly powered by LiteSpeed Web Server at the bottom | The web server. Your site runs on a LiteSpeed server | Find 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 bottom | The web server. Your site runs on an Apache server | Find 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 logo | The web server, with the standard LJPc hosting error page | Find the cause in the list of causes below |
| A potentially unsafe operation has been detected in your request to this site | The firewall of the Wordfence WordPress plugin | See a security plugin or Cloudflare blocks you |
| A Cloudflare page with a Cloudflare Ray ID at the bottom | Cloudflare, if your domain runs through Cloudflare | See a security plugin or Cloudflare blocks you |
| An error page in the style of your own website | Your website shows its own error page; the block itself can come from the server or from a plugin | Find 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.
- Open Plesk from the customer portal. See open Plesk from the customer portal for how it works.
- Go to Websites & Domains and click the Dashboard tab in your domain's card.
- Under Dev Tools, click Logs.
- 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.
- 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.
- Clear the Code filter, choose Apache error under All logs in the top right and search Message for
denied.
| Message | What it means |
|---|---|
AH01630: client denied by server configuration | A rule denies access: in .htaccess or a WP Toolkit security measure |
AH01276: Cannot serve directory ...: No matching DirectoryIndex ... found | The folder has no index file, such as index.php or index.html |
A line with Permission denied | The 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
| What happens | Most likely cause |
|---|---|
| Your whole site or every PHP file returns a 403, while images and HTML load | The run PHP as setting |
| Your main domain or a folder returns a 403 | A missing index file |
| One file or folder returns a 403 after uploading | File permissions |
| A 403 after editing .htaccess, or on an installer script | A rule in .htaccess |
| xmlrpc.php, a PHP file in wp-content/uploads or an SEO tool gets a 403 | A WP Toolkit security measure |
| A 403 when saving in WordPress or on one specific action | A security plugin or Cloudflare |
| Sudden 403 errors in many places, without any change on your side | Files 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:
- In Plesk, open your domain's Dashboard and click PHP under Dev Tools.
- Check run PHP as. If it shows an option with FPM application, choose FastCGI application served by Apache.
- Leave the PHP version as it is and click OK at the bottom.
- 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.
- Open File Manager and turn on Show system files and directories under More > View Options, so .htaccess becomes visible.
- Download .htaccess to your computer as a backup.
- Remove the rule that denies access and save the file.
- 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.
| What gets a 403 | The WP Toolkit measure |
|---|---|
| xmlrpc.php, for example for Jetpack or an app that uses XML-RPC | Block access to xmlrpc.php |
| A PHP file in wp-content/uploads | Forbid execution of PHP scripts in the wp-content/uploads directory |
| A PHP file in wp-includes opened directly | Forbid execution of PHP scripts in the wp-includes directory |
| SEO tools and scanners such as Ahrefs, Semrush and Majestic, or a script using python-requests | Enable bot protection |
An address with ?author=1, the author page by author number | Block author scans |
| Files ending in .log, .ini, .sh, .exe, .bat, .cmd, .csh or .psd | Block access to potentially sensitive files |
Googlebot and Bingbot are not on the bot protection list, so Google and Bing keep crawling your site.
- In Plesk, click WordPress in the left menu and find your site's card.
- Click the message under Security, for example Critical security measures applied.
- Select only the measure that causes the 403 and click Revert.
- 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.