I have a server on AWS which serves a number of websites. Webmin is also installed.
In Apache, when I try to create a website, say ?ferrari.example.com?, I get the error ?Forbidden. You don?t have permission to access this resource.? when I request it with a web browser.
It is NOT a file permission issue, because if I use a different domain name (pointing to the same directory), it works fine.
It is NOT an Apache config issue, because if I change only the domain name (and no other config settings), it works fine.
Yes, I have a correct DNS entry that points subdomain.example.com points to my server.
I faced the same issue.
Here?s how I solved it?
You get this error because Apache does not have access to the directory of your application. Remember that the directory contains the application, not the directory / on the server (or the Apache personal computer installed in the localhost environment).
The reason you get this error is because even though you set permissions even 777 for your app root directory ( /var/www/my_app), you still need to set extra permissions. The directory for Apache in the config files is usually httpd.conf or httpd-vhosts.conf. For example:
<Directory /var/www/my_app>
Options FollowSymLinks
AllowOverride All
Order deny,allow
Allow from all
</Directory>
Note that after changing one of the two config files above, you need to restart Apache. On Ubuntu, the command to start Apache will be:
$ sudo service apache2 restart
On Linux versions of Redhat this command will be:
$ sudo service httpd restart
If you have set the above and restarted Apache but still you need to check if there is any other directive that overrides the directive above. Normally, Apache has a strict default configuration with a directive created in httpd.conf as follows:
<Directory /> Options FollowSymLinks AllowOverride All Order deny, allow Allow from all</Directory>And you need to make sure that the directive you create for my_app is below the available directive. Or you can comment away the instructions available on.
Other ways?
Open the apache2.conf file using the nano editor.
sudo nano /etc/apache2/apache2.conf
Replace the general directory settings with this.
<Directory /> #Options FollowSymLinks Options Indexes FollowSymLinks Includes ExecCGI AllowOverride All Order deny,allow Require all granted</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>
Ensure your virtual host configuration file in /etc/apache2/sites-available directory is in this manner
<VirtualHost *:80> # The ServerName directive sets the request scheme, hostname and port t$ # the server uses to identify itself. This is used when creating # redirection URLs. In the context of virtual hosts, the ServerName # specifies what hostname must appear in the request’s Host: header to # match this virtual host. For the default virtual host (this file) this # value is not decisive as it is used as a last resort host regardless. # However, you must set it for any further virtual host explicitly. ServerName example.com (put your domain name here) ServerAdmin webmaster@localhost DocumentRoot /home/username/myapp (put your app root directory here) # Available loglevels: trace8, …, trace1, debug, info, notice, warn, # error, crit, alert, emerg. # It is also possible to configure the loglevel for particular # modules, e.g. #LogLevel info ssl:warn ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined # For most configuration files from conf-available/, which are # enabled or disabled at a global level, it is possible to # include a line for only one particular virtual host. For example the # following line enables the CGI configuration for this host only # after it has been globally disabled with “a2disconf”. #Include conf-available/serve-cgi-bin.conf</VirtualHost># vim: syntax=apache ts=4 sw=4 sts=4 sr noet
Restart Apache2 service
sudo systemctl restart apache2
That?s all.
I hope this helps