当我试图通过浏览器访问localhost时,我得到这个错误。

AH01630: client denied by server configuration

我检查了我的网站文件夹权限使用:

sudo chmod 777 -R *

这是我的配置文件:

<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>


当前回答

这个“bug”实际上是Apache 2.4的新常态。在我的例子中,我有一个非常具体的规则,拒绝访问任何名称以“。”开头的文件夹或文件,因此我必须为需要这种奇怪名称的特定公用文件夹设置一个异常。

声明一下,我的重写规则是:

RewriteRule”(? ! \ .trusted)(^ | /) \”。- [F]

这条规则[F]删除了所有以“。”开头的东西,但是。trusted,多亏了正则表达式“?!”否定的魔力。

其他回答

确保包括任何特定于用户的配置!

如果这一页上的其他答案都不适合你,下面是我在几个小时的挣扎后遇到的。

我使用了特定于用户的配置,在/private/etc/apache2/extra/httpd-userdir.conf中将Sites指定为我的UserDir。但是,我被禁止访问端点http://localhost/~jwork/。

我可以在/var/log/apache2/error_log中看到对/Users/jwork/Sites/的访问被阻止。但是,我被允许通过http://localhost/访问DocumentRoot。这表明我没有权限查看~jwork用户。但据我所知,ps aux | egrep '(apache|httpd)'和lsof -i:80, apache是为jwork用户运行的,所以很明显没有使用我的用户配置编写一些东西。

给定一个名为jwork的用户,下面是我的配置文件:

二等兵/ etc / apache2 \用户/ jwork上。

<Directory "/Users/jwork/Sites/">
    Require all granted
</Directory>

这个配置完全有效。然而,我发现我的用户配置没有被包括在内:

/私人/ etc /输入/多/ httpd-userdir.conf

## Note how it's commented out by default.
## Just remove the comment to enable your user conf.
#Include /private/etc/apache2/users/*.conf

注意,这是userdir conf文件的默认路径,但正如您将在下面看到的,它是在httpd.conf中可配置的。确保下列行已启用:

/ / etc / apache2 /私人httpd.conf

Include /private/etc/apache2/extra/httpd-userdir.conf

# ...

LoadModule userdir_module libexec/apache2/mod_userdir.so

问题出在VirtualHost中,但可能不是

要求全部批准

确认您的配置是正确的,下面是正确的示例

为了帮助像我一样在谷歌上搜索的人,我在试图访问服务器上的SVG文件时遇到了这个错误消息,例如https://example.com/images/file.svg。其他文件类型似乎还好,只是SVG失败了。

我在/etc/httpd conf文件中寻找,并检查了每一个要求所有拒绝类型的配置,只是找不到什么配置有这种效果。

我在VirtualHost配置中将LogLevel转换为调试,可以看到mod_authz_core日志指定有一个'Require all denied'的效果:

[Mon Jun 10 13:09:54.321022 2019] [authz_core:debug] [pid 23459:tid 140576341206784] mod_authz_core.c(817): [client 127.0.0.1:54626] AH01626: authorization result of Require all denied: denied
[Mon Jun 10 13:09:54.321038 2019] [authz_core:debug] [pid 23459:tid 140576341206784] mod_authz_core.c(817): [client 127.0.0.1:54626] AH01626: authorization result of <RequireAny>: denied
[Mon Jun 10 13:09:54.321082 2019] [authz_core:error] [pid 23459:tid 140576341206784] [client 127.0.0.1:54626] AH01630: client denied by server configuration: /home/blah/htdocs/images/file.svg

通过盲测,我将文件移动到web根目录的根目录,然后发现我可以在https://example.com/file.svg上访问它。所以它只在images文件夹失败了。这让我在images文件夹中找到了一个我完全不知道的。htaccess文件。

原来禅宗车1.5带有一个图像/。Htaccess文件有:

# deny *everything*
 <FilesMatch ".*">
   <IfModule mod_authz_core.c>
     Require all denied
   </IfModule>
   <IfModule !mod_authz_core.c>
     Order Allow,Deny
     Deny from all
   </IfModule>
 </FilesMatch>

 # but now allow just *certain* necessary files:
 <FilesMatch "(?i).*\.(jpe?g|gif|webp|png|swf)$" >
   <IfModule mod_authz_core.c>
     Require all granted
   </IfModule>
   <IfModule !mod_authz_core.c>
     Order Allow,Deny
     Allow from all
   </IfModule>
 </FilesMatch>

这是非常恼人的,我希望这可以提醒其他人检查文件系统的每一个级别的.htaccess文件,导致你有问题访问的文件,以防有这种tom愚行正在发生。

一个模糊的(刚刚处理过),但可能的原因是一个内部的mod_rewrite规则,在主配置文件(不是.htaccess)中写入一个存在于服务器文件系统根的路径。假设你在你的站点中有一个/media目录,你重写了如下内容:

RewriteRule /some_image.png /media/some_other_location.png

如果你在你的服务器的根目录下有一个/media目录,重写将会尝试到这个目录(导致访问被拒绝错误),而不是在你的站点目录下,因为文件系统的根首先被mod_rewrite检查,在你的站点目录之前,检查路径中的第一个目录是否存在。

问题可能是指令不在<目录>下

https://httpd.apache.org/docs/2.4/mod/mod_authz_host.html#requiredirectives

该指令可以在< Directory>, < Files>,或< Location> section以及.htaccess文件中引用,以控制对服务器特定部分的访问。访问可以基于客户端主机名或IP地址进行控制。