Apache 配置问题和

Apache 配置问题和

我遇到了一个非常棘手的问题。我这里有一个暂存系统,只有我们的客户和我们的公司才能访问。这是使用以下配置完成的:

<Directory "/srv/www/example.com">
    AllowOverride All
    Options FollowSymlinks -Indexes
    Order deny,allow
    Allow from 127.0.0.0/8 1.2.3.4 5.6.7.8
    # our IP
    Allow from 4.3.2.1
    # PayPal IPN
    Allow from 216.113.191.33
#    Deny from all

    AuthType Basic
    AuthName "Restricted Files"
    AuthUserFile /srv/www/htdocs/.htpasswd
    Require valid-user
    Satisfy Any
</Directory>

现在我想将一个 URL 公开,以便每个人都可以访问它。由于它是一个 URL,所以我选择了指令Location。所以我尝试了以下操作:

<Location /url/to/config.xml>
    Order allow,deny
    Allow from all
</Location>

但无论我尝试哪种组合Order,它都不起作用,服务器总是要求输入凭据。我遗漏了什么吗?据我了解,apache.org 上的文档,Location 指令是在 Directory 之后解析的,因此应该能够覆盖访问限制。

有什么想法/提示吗?

答案1

您应该能够使用多个 <Directory> 块来执行此操作。以下是适用的 apache 文档的链接:

http://httpd.apache.org/docs/2.2/sections.html

我认为你的情况的关键点是:

何时使用

在文件系统容器和网络空间容器之间进行选择其实相当容易。将指令应用于驻留在文件系统中的对象时,请始终使用 <Directory> 或 <Files>。将指令应用于不驻留在文件系统中的对象(例如从数据库生成的网页)时,请使用 <Location>。

尝试限制对文件系统中对象的访问时,切勿使用 <Location>。这是因为许多不同的网络空间位置 (URL) 可能映射到同一文件系统位置,从而允许规避您的限制。

http://httpd.apache.org/docs/2.2/sections.html#mergin- 具体来说:

除了 <Directory> 之外,每个组都按照它们在配置文件中出现的顺序进行处理。<Directory>(上面的第 1 组)按照从最短目录组件到最长目录组件的顺序进行处理。例如,<Directory /var/web/dir> 将在 <Directory /var/web/dir/subdir> 之前进行处理。如果多个 <Directory> 部分适用于同一目录,则它们将按照配置文件的顺序进行处理。通过 Include 指令包含的配置将被视为位于 Include 指令位置的包含文件中。

我认为这会起作用:

<Directory "/srv/www/example.com">
    AllowOverride All
    Options FollowSymlinks -Indexes
    Order deny,allow
    Allow from 127.0.0.0/8 1.2.3.4 5.6.7.8
    # our IP
    Allow from 4.3.2.1
    # PayPal IPN
    Allow from 216.113.191.33
#    Deny from all

    AuthType Basic
    AuthName "Restricted Files"
    AuthUserFile /srv/www/htdocs/.htpasswd
    Require valid-user
    Satisfy Any
</Directory>
<Directory "/srv/www/example.com/url/to/config.xml">
    Order allow,deny
    Allow from all
</Directory>

相关内容