If you have set your permissions and created your virtual hosts files but still get the error look to your apache config.
The apache2 configuration file now has a default security model that may be preventing your directory being served. I host mine in my home directory which I always have to add to this part of the configuration to apache2.conf.
sudo vim /etc/apache2/apache2.conf
Around line 146 you will see the following section.
# Sets the default security model of the Apache2 HTTPD server. It does
# not allow access to the root filesystem outside of /usr/share and /var/www.
# The former is used by web applications packaged in Debian,
# the latter may be used for local directories served by the web server. If
# your system is serving content from a sub-directory in /srv you must allow
# access here, or in any related virtual host.
<Directory />
Options FollowSymLinks
AllowOverride None
Require all denied
</Directory>
<Directory /usr/share>
AllowOverride None
Require all granted
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
#<Directory /srv/>
# Options Indexes FollowSymLinks
# AllowOverride None
# Require all granted
#</Directory>
Add your custom web directory to this section. Tweak the other parameters as needed.
<Directory /home/my_custom_directory/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
Note: I use drupal which needs the AllowOveride All for the .htaccess file to work. You may not need this in your final config.