Asset Server
Serving assets from user views and modules.
The asset server handles /assets/* requests and supports module assets.
- User assets:
user/views/assets/... - Module assets:
/assets/{module}/...
Tenancy #
When tenancy is enabled, user assets resolve under:
user/tenants/<tenant>/views/assets/...
Path-based tenancy uses /tenant/assets/... URLs automatically via asset().
Static files include strong cache headers and ETag validation.
Allowed extensions #
Only known static file types are served (CSS, JS, images, fonts, media, JSON, etc.).
Security #
Paths are normalized and resolved with realpath() to prevent directory traversal.