Apache保护所有路径,但将特定路径列入白名单

时间:2010-08-19 13:15:45

标签: apache .htaccess configuration passwords access-control

下面是我的VHost(稍加修改以模糊某些URL):

  1 NameVirtualHost 192.168.1.49:80
  2
  3 <VirtualHost 192.168.1.49:80>
  4   ServerName internal-name.local
  5   ServerAlias *.internal-name.local external-domain.co.uk *.external-domain.co.uk
  6
  7   <Directory "/var/www/html">
  8     AllowOverride All
  9
 10     Order deny,allow
 11     Deny from all
 12
 13     AuthName "Restricted Development Server"
 14     AuthUserFile /var/www/html/.htpasswd
 15     AuthType Basic
 16     Require valid-user
 17
 18     Allow From 192.168.1.
 19
 20     Satisfy Any
 21   </Directory>
 22
 23   <Location /open-path >
 24     Order Allow,Deny
 25     Allow From All
 26     Deny From None
 27   </Location>
 28
 29   LogLevel debug
 30   VirtualDocumentRoot /var/www/html/%1/
 31 </VirtualHost>

一切正常 - 每个子域都在/ var / www / html中获得自己的文件夹。来自192.168.1.x的任何请求(通过内部域映射)都可以在没有密码提示的情况下查看该站点。任何来自外部IP的请求(通过external-domain.co.uk)都将被提示输入密码。

我遇到的问题是让最后一个“位置”规则起作用。

我没有(无论是.htaccess还是vhost级别)使用或将禁用“/ open-path”URL的密码保护。

实际上 - 此服务器上的每个站点都运行Drupal,它在.htaccess中使用URL Rewrite,它将所有非文件映射到“?q =”...所以: http://domain/foo/bar 映射到: http://domain/index.php?q=foo/bar

我认为不应该影响这个,不是吗?

我指出的原因是需要打开“/ open-path / callback”以使第三方API“ping”该站点。我需要在推送之前测试这个回调是否正常工作,但我不想从密码保护中揭开整个网站。

我已经尝试将位置设置为“/index.php?q=open-path”,这也没有用。

任何建议都会非常感激!

1 个答案:

答案 0 :(得分:3)

这是来自Apache文档: http://httpd.apache.org/docs/2.2/mod/core.html#require

<Directory /path/to/protected/unprotected>
# All access controls and authentication are disabled
# in this directory
Satisfy Any
Allow from all
</Directory>

这也适用于位置。