下面是我的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”,这也没有用。
任何建议都会非常感激!
答案 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>
这也适用于位置。