What do 500, 403, 404 and 508 errors mean on my website?

The number tells you where the problem is. Find yours below.

Code Means Where the problem usually is
500 Internal Server Error Your site's code or configuration crashed
403 Forbidden The server refused to show the file
404 Not Found The file or page doesn't exist at that address
508 Resource Limit Reached Your account hit its limits

Find the error log first

For 500 and 403 errors, the log tells you the real cause.

  • cPanel: Metrics → Errors. Shows the last messages from the web server. For PHP errors, also look for error_log files inside public_html with File Manager.
  • DirectAdmin: System Info & Files → Site summary & logs, then the domain's error log. Also check for error_log files in public_html.

Read the newest lines. They name the file and often the line number.

500 Internal Server Error

Something on your site failed before a page could be produced. The server doesn't say what in the browser; the log does.

Common causes, most likely first

  1. A broken .htaccess file. One wrong line is enough. Rename .htaccess to .htaccess.old in File Manager and reload. If the site returns, the file is the problem. Restore it line by line. On WordPress, resave Settings → Permalinks to rebuild it.
  2. A PHP error. Read the error_log. It names the file. On WordPress, it's usually a plugin or theme: rename that plugin's folder in wp-content/plugins to disable it.
  3. Wrong PHP version. Old code on a new PHP version, or the reverse. Switch versions in the control panel and reload. See How to change my PHP version and PHP settings.
  4. Wrong file permissions. Folders should be 755 and files 644. Files or folders set to 777 can cause a 500 error. Fix permissions in File Manager (right-click → Change Permissions).
  5. PHP memory or execution limit hit. The log says "Allowed memory size exhausted" or "Maximum execution time exceeded". See How to change my PHP version and PHP settings.

403 Forbidden

The server found the address but refused to serve it.

Common causes

  1. No index file. If a folder has no index.html or index.php, the server refuses to list it and shows 403. Upload your files, or check they are in public_html and not a subfolder.
  2. File permissions too tight. Files need 644, folders 755. A file set to 600 or a folder set to 700 is unreadable by the web server.
  3. A deny rule in .htaccess. Look for lines starting Deny from, Require, or an IP block. Remove what you don't recognise, or rename the file to test.
  4. A security rule on the server blocked the request. Certain form submissions, URLs or uploads trigger the server's web application rules, which return 403. This is common with page builders and plugin settings that send code-like content. You can't change these rules yourself. Open a ticket with the exact URL and the time it happened.
  5. Your IP address is blocked. If everything on the domain, including the control panel, fails from your connection only, see My website works for others but not for me.

404 Not Found

The address is wrong, or the file isn't where the server is looking.

Common causes

  1. The file isn't there. Check the exact path in File Manager. Your main domain serves from public_html; an addon domain or subdomain serves from its own folder, shown under Domains.
  2. Capital letters. Linux servers are case-sensitive: Photo.JPG and photo.jpg are different files. Match the case in your links to the real file names.
  3. WordPress pages give 404 but the home page works. The permalink rules are missing. In WordPress go to Settings → Permalinks and click Save Changes. If that fails, check that .htaccess exists and is writable.
  4. You just moved the site. DNS may still point to the old server, or the files went into the wrong folder. See How long does DNS propagation take?
  5. A Node.js or Python app on DirectAdmin. Most DirectAdmin servers run OpenLiteSpeed, which can't run apps. See My Node.js or Python app won't start or shows an error (503, 404, placeholder page).

508 Resource Limit Reached

Your hosting account hit one of its limits, and the server refused new requests until usage dropped.

The limits (defaults): 2 GB memory, 30 entry processes (requests being handled at the same moment), 90 processes. A 508 is almost always the entry processes limit: 30 requests were already running when the next arrived.

Check what happened

Open Resource Usage (cPanel) or Extra Features → Resource Usage (DirectAdmin) and look at the graphs for the time of the error. It shows which limit was hit and when.

Common causes

  1. Bots crawling the site. Dozens of requests a second from one crawler fill all 30 slots. Check the visitor logs (cPanel: Raw Access or Visitors) for repeated hits from one IP or user agent. Block them in .htaccess or with a security plugin.
  2. Slow pages. A page that takes 10 seconds holds a slot for 10 seconds. Uncached WordPress with heavy plugins is the usual case. Add page caching: on DirectAdmin servers use LiteSpeed Cache; on cPanel use a caching plugin.
  3. Cron jobs or scheduled tasks running every minute and overlapping.
  4. A plugin or script stuck in a loop. Check the error log for the same file repeating.
  5. Traffic outgrew the plan. If the site is healthy and simply busy, upgrade the plan.

Other codes you may see

Code Means What to do
502 / 503 The app or backend didn't answer For Node.js/Python apps, see My Node.js or Python app won't start or shows an error (503, 404, placeholder page). Otherwise check the status page and try again in a minute
504 Timed out waiting for the site Usually a very slow script or database query. Check the error log and resource usage
429 Too many requests You or a script hit a rate limit. Wait and slow down
Blank white page A PHP error with error display off Read the error_log. Treat as a 500

Still stuck?

Open a support ticket and include:

  • The domain and the exact address that gives the error.
  • The error code and a screenshot.
  • The last 20 lines of the error log, copied from the control panel or error_log.
  • Whether it happens on every page or only some.
  • When it started, and what changed just before (update, upload, .htaccess edit, PHP version, new plugin).
  • For a 508: the time it happened, so we can match it to the resource graphs.

Did this answer it?