可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I get this error when trying to access localhost via a browser.
AH01630: client denied by server configuration
I checked my site folder permissions using:
sudo chmod 777 -R *
Here is my configuration file:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /home/user-name/www/myproject
<Directory />
Options FollowSymLinks
AllowOverride all
Allow from all
</Directory>
<Location />
Allow from all
Order Deny,Allow
</Location>
<Directory /home/user-name/www/myproject/>
Options Indexes FollowSymLinks MultiViews
AllowOverride all
Order allow,deny
Allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory \"/usr/lib/cgi-bin\">
AllowOverride all
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
Alias /doc/ \"/usr/share/doc/\"
<Directory \"/usr/share/doc/\">
Options Indexes MultiViews FollowSymLinks
AllowOverride all
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
回答1:
If you are using Apache 2.4
You have to check allow and deny rules
Check out http://httpd.apache.org/docs/2.4/upgrading.html#access
In 2.2, access control based on client hostname, IP address, and other
characteristics of client requests was done using the directives
Order, Allow, Deny, and Satisfy.
In 2.4, such access control is done in the same way as other
authorization checks, using the new module mod_authz_host.
The new directive is Require:
2.2 configuration:
Order allow,deny
Allow from all
2.4 configuration:
Require all granted
Also don\'t forget to restart the apache server after these changes (# service httpd restart
)
回答2:
For all directories write Require all granted
instead of Allow from all
Update
If the above doesn\'t work then also remove this below mentioned line:
Order allow,deny
回答3:
Double check that the DocumentRoot path is correct. That can cause this error.
回答4:
I made the same changes that ravisorg suggested to OSX 10.10 Yosemite that upgrades Apache to version 2.4. Below are the changes that were added to http.conf.
<Directory />
AllowOverride none
Require all denied
</Directory>
<Directory /Volumes/Data/Data/USER/Sites/>
AllowOverride none
Require all granted
</Directory>
回答5:
This drove me absolutely nuts for a day and a half but I found a solution if all other solutions have been tried unsuccessfully.
This is for macOS.
- Go to activity Monitor (spotlight search for: activity)
- In activity monitor search for httpd which is the Apache service
- Select the one that belongs to root and click X on the top left to close it.
At that point I immediately stopped getting 403 errors and everything started working as expected. Weird thing is i didn\'t even have to restart apache it just worked, i guess it restarted itself when i went to my localhost, I honestly don\'t know but I guess the problem is Apache not actually restarting when using apachectl restart, or stop or start. Hope this helps someone.
回答6:
The problem is in VirtualHost but probablely is not
Require all granted
Confirm your config is correct,here is correct sample
回答7:
If you tail the error log and reload the page, you should see some more information as to the exact problem.
Grab the environment variables so ${APACHE_LOG_DIR} will actually work...
source /etc/apache2/envvars
Then tail and watch...
tail -f ${APACHE_LOG_DIR}/error.log
回答8:
in my case,
i\'m using macOS Mojave (Apache/2.4.34). There was an issue in virtual host settings at /etc/apache2/extra/httpd-vhosts.conf file. after adding the required directory tag my problem was gone.
Require all granted
Hope the full virtual host setup structure will save you.
<VirtualHost *:80>
DocumentRoot \"/Users/vagabond/Sites/MainProjectFolderName/public/\"
ServerName project.loc
<Directory /Users/vagabond/Sites/MainProjectFolderName/public/>
Require all granted
</Directory>
ErrorLog \"/Users/vagabond/Sites/logs/MainProjectFolderName.loc-error_log\"
CustomLog \"/Users/vagabond/Sites/logs/MainProjectFolderName.loc-access_log\" common
</VirtualHost>
all you\'ve to do replace the MainProjectFolderName with your exact ProjectFolderName.
回答9:
I got resolved my self after spending couple of hours.
I installed Apache/2.4.7 (Ubuntu) through coookbook in vagrant vm.
/etc/apache2/apache2.conf file does not have <VirtualHost *:80>
element by default.
I did two changes to get it done
- added
<VirtualHost *:80>
- added
Options Indexes FollowSymLinks
AllowOverride all
Allow from all
then finally I just booted vm..
回答10:
Has anyone thought about that wamp server default not include the httpd-vhosts.conf
file.
My approach is to remove the note below
conf
# Virtual hosts
Include conf/extra/httpd-vhosts.conf
in httpd.conf
file.
That is all.
回答11:
This was driving me crazy. Finally figured out what the problem was:
I was using direct paths for the error log and they were wrong.
Why does Apache give a vague (and wrong) error message? Instead use a correct and useful error message like: Path for ErrorLog directive \"/wrong/path/and/filename.log\" is invalid.
Anyway, to fix make sure your error log directives look something like this:
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
回答12:
If you have https host then don\'t forget to make Require all granted
changes for ssl config too.
Also, sometimes it\'s useful to check permissions as the apache user:
# ps -eFH | grep http # get the username used by httpd
...
apache 18837 2692 0 119996 9328 9 10:33 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
# su -s/bin/bash apache # switch to that user
bash-4.2$ whoami
apache
bash-4.2$ cd /home
bash-4.2$ ls
bash-4.2$ cd mysite.com
bash-4.2$ ls
bash-4.2$ cat file-which-does-not-work.txt
回答13:
For Wamp 3 (Apache 2.4), besides putting the server online as described in the other answers, in the Virtual Hosts file conf/extra/httpd-vhosts.conf
you might need to replace
Require local
with
Require all granted
This is applicable if in httpd.conf
you have
Include conf/extra/httpd-vhosts.conf
回答14:
Beside missing Order
and Allow
directives mentioned in other answers be aware that a non-matching regular expression of a DirectoryMatch
directive may also cause this error.
If the requested path is /home/user-foo1bar/www/myproject/
the folloing matcher won\'t match
<DirectoryMatch \"/home/user-[a-z]+/www/myproject/\">
...
</DirectoryMatch>
thus, even a valid access configuration might cause this error.
回答15:
One obscure (having just dealt with it), yet possible, cause of this is an internal mod_rewrite rule, in the main config file (not .htaccess) that writes to a path which exists at the root of the server file system. Say you have a /media
directory in your site, and you rewrite something like this:
RewriteRule /some_image.png /media/some_other_location.png
If you have a /media
directory at the root of your server, the rewrite will be attempted to that (resulting in the access denied error) rather than the one in your site directory, since the file system root is checked first by mod_rewrite, for the existence of the first directory in the path, before your site directory.
回答16:
The problem may be that directive is not under < Directory>
https://httpd.apache.org/docs/2.4/mod/mod_authz_host.html#requiredirectives
The directive can be referenced within a < Directory>, < Files>, or < Location> section as well as .htaccess files to control access to particular parts of the server. Access can be controlled based on the client hostname or IP address.
回答17:
I got another one that may be useful to someone.
Was receiving the same error message after upgrading from PHP 5.6 => 7.0. We had changed the PHP upload settings, and forgot to change once copied over.
Even though i wasn\'t uploading images at the time, Silverstripe (our CMS) was refusing to save and throwing that error. Increased the image upload size and it worked straight away.
回答18:
When using Ubuntu check whether the CGI module is enabled. If not:
sudo a2enmod cgi