Dashlets not loading (400 Bad Request/"Method Not Allowed 405"/AJAX Failures after Upgrade - Entry Point Missing?

Environment

SuiteCRM version: 7.x (latest stable)
Server: Ubuntu 22.04 (Hetzner Cloud)
Web stack: Apache 2.4.58 (Ubuntu), PHP 8.2, MariaDB 10.11
Access: SSH + root + www-data ownership verified
Security: SSL (Let’s Encrypt), UFW + Hetzner firewall, Fail2Ban active

Symptoms

When loading the dashboard, dashlets never populate. Browser DevTools shows:
POST https://crm.divineflowai.com/index.php?entryPoint=retrieve_dash_page → 400 (Bad Request)
or 405 (Method Not Allowed). Sometimes Invalid JSON or Forbidden appears.

Logs

SuiteCRM log (/var/www/html/suitecrm/suitecrm.log):
action_get MODULE: Alerts
result is mysqli_result Object
Alerts:before_acl_query
process_full_list_query: result is mysqli_result Object

Apache error.log:
AH01630: client denied by server configuration: /var/www/html/suitecrm/modules/Home/retrieve_dash_page.php

What I’ve Tried So Far

  • • Cache and Permissions Reset
  • • Checked Apache & PHP Config
  • • Verified Entry Point References
  • • Created Missing File
  • • Quick Repair & Rebuild
  • • JS & Browser Debugging
  • • Removed Custom Overrides

Current State

:white_check_mark: All ownerships fixed
:white_check_mark: Apache modules active
:white_check_mark: PHP 8.2 compatible
:white_check_mark: Entry point references exist in registry
:x: Dashlets still not rendering
:x: Invalid JSON + 400/405 persists
:x: Forbidden on direct retrieve_dash_page.php access

Suspected Causes

  1. Missing or corrupted retrieve_dash_page.php entry point.
  2. AJAX JSON parsing issue (PHP 8.2 stricter behavior).
  3. custom/modules/Home/dashlets.php or index.php override missing key variable like $dashboardPages.
  4. Potential mod_security filter rejecting POST data to /index.php?entryPoint=retrieve_dash_page.

Questions

  1. Can someone share the correct default contents of /modules/Home/retrieve_dash_page.php for SuiteCRM 7.x?
  2. Does entry_point_registry.php need specific structure for that entry point?
  3. Could PHP 8.2 or stricter JSON encoding be the reason for 400 errors?
  4. Should I fully remove /custom/modules/Home/dashlets.php to restore defaults?

References

Forum Post (2018): Dashboard content not loading — Studio> error loading relationships on some modules

Summary

Everything else in SuiteCRM works fine — Accounts, Contacts, Calls, etc. Only the home dashboard fails to load dashlets after login.
Logs show the entry point being referenced, but response always returns invalid JSON / forbidden.
Any guidance or working file examples would be hugely appreciated.

Thanks in advance!
— Isaac

Hello Isaac,

400 or 405 is pretty clear - usually something around server config / restrictions / permissions.
As for the file, you can check the original contents on git:

Probably not it, but try to deactivate Fail2Ban whilst you’re testing.

Look into this one first.
Maybe htaccess / rewrite / vhost config.

It could also be the cache. This is served up substancially from the cache folder. There is an option in your user record, something like “reset dashboard” that has fixed many problems with the home screen not working over the years for me. Not sure its exactly your problem, but couldn’t hurt.

I appreciate it the reply, unfortunately none of that worked,

I had to backup and re install suitecrm on my server.

Then as I copied back in my “/var/www/html/suitecrm/custom” then I got the same issue again. so i deleted it, started adding it back in, one by one, once I got to the end.

dashlets are fine now, BUT I cannot use my custom modules, not in Menu filter and not in Studio.

it’s in the same place as it should be.

I see the package and module in Module builder but It does not show up anywhere else.

I even created a new “test Package” and new “test Module” with the same fields and also does not appear in Studio or Menu filters.

Any help would be much appreciated

Can you install a plain, vanilla LAMP system somewhere (on a virtualbox or anywhere) and try to get the plain / standard CRM version there?
That usually works always (given the correct setup).

If you’ve got this working, then you can add your customizations to the CRM and test one by one, whether everything still works.

If that works as well, you can add the “Hetzner specialties” to your VirtualBox and try to replicate your server environment and see when things are failing.

The alternative approach is to keep on debugging, increase log levels, see whether you can switch off any non-vanilla services on Hetzner.
I believe, this will take quite some time. Those server related issues can be tricky to identify.

I’ve got one project on a Hetzner Cloud VPS, it’s a newer version (24 LTS) with MariaDB and Suite 8.7 as well as one 8.8.1 and quite some custom modules and integrations.
All is working quite well.

You need to stick to Suite 7?

Hi @Colddrum ,
Can you share the correct default contents of /modules/Home/retrieve_dash_page.php for SuiteCRM 7.x?”

There isn’t such a file in 7.x. The correct handler is include/MySugar/retrieve_dash_page.php (see registration above). Direct access to anything under modules/Home/*.php for this purpose is blocked.

Does entry_point_registry.php need specific structure for that entry point?”

Yes; it must contain:
Key: retrieve_dash_page
File: include/MySugar/retrieve_dash_page.php
auth => true
If you’ve overridden registry under custom/include/MVC/Controller/entry_point_registry.php, ensure it merges correctly and includes the same mapping.

Could PHP 8.2 or stricter JSON encoding be the reason for 400 errors?”

Unlikely. This endpoint outputs HTML via Smarty. 400/405 are typically server or proxy issues, not PHP JSON encoding, rewrites, and session/cookies.

Should I fully remove /custom/modules/Home/dashlets.php to restore defaults?”

Don’t delete; move/rename it to test. If dashlets then load, fix syntax/array definitions in your custom file. Also clear cache/dashlets/dashlets.php and run Admin → Repair → Quick Repair and Rebuild.

Quick checklist to resolve

Ensure you’re calling index.php?entryPoint=retrieve_dash_page (not any modules/…php path).

Confirm registry contains the mapping shown above.

Disable or tune ModSecurity/other WAF rules for this endpoint if audit logs show blocks.

Verify proxy preserves query strings and request method; no rewrite to physical files.

Temporarily move custom/modules/Home/dashlets.php aside; clear cache/dashlets/dashlets.php; Quick Repair and Rebuild.

Confirm session cookies are present and site_url/protocol in config.php match your access URL.