There are multiple solutions to achieve this:
1) Apply an irule to redirect all non-www requests to www at external Load-balancer used of your site. E.g. BIGIP // At times it can be performance intensive based on the volume of traffic
2) Depending on the physical architecture of your site and if you have a multi-domain site pointing to same origin server, then you may use another solution at DNS level. //this solution depends on how DNS setup is done.
3) Apply the redirect at apache or use CQ rewrite rules aka mappings. // Not recommended because this would still serve the cached content to non-www requests from CDN/dispatcher and would not enforce redirection at all times. Could become performance bottleneck or a design issue in the future based on your requirements
If you have a simple use case then go with Load balancer irule something like --
irule:
when HTTP_REQUEST {
HTTP::respond 301 Location "https://www.[HTTP::host][HTTP::uri]"
}
CQ mapping rule for reference:

