On most shared hosting, you can't set the webroot. As an alternative, a rewriterule to the web folder can do this.
Could be something like
RewriteRule ^(.*)$ web/$1 [L].
This works on main sites in Craft 3, but breaks subsites.
I've found an answer from Brandon Kelly, suggesting to use different indexes.php and loading the correct one via the htaccess. (based on subsite prefix)
Is there a better solution since this date, that might prevent the need for different indexes?