使用<Directory>和<Location>的Apacheconfiguration问题

我陷入了一个非常讨厌的问题。 我有一个临时系统,只有我们的客户和我们的公司应该可以访问。 这是使用以下configuration完成的:

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

但是无论我尝试使用哪种组合,它都不能正常工作,而且服务器总是要求凭证。 我错过了什么吗? 据我了解在apache.org的文档,位置指令parsing后的目录,因此应该能够覆盖访问限制。

任何想法/提示?

你应该可以用多个<Directory>块来做到这一点。 这里是适用的apache文档的链接:

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

我认为你的案例的关键项目是:

什么时候使用

在文件系统容器和webspace容器之间进行select其实很简单。 将指令应用于驻留在文件系统中的对象时,请始终使用<Directory>或<Files>。 将指令应用于不在文件系统中的对象(如从数据库生成的网页)时,使用<Location>。

当试图限制访问文件系统中的对象时,从不使用<Location>非常重要。 这是因为许多不同的web空间位置(URL)可以映射到相同的文件系统位置,从而可以规避您的限制。

另外http://httpd.apache.org/docs/2.2/sections.html#mergin – 具体地说:

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

我认为这将工作:

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