我正在运行 Apache/2.2.22。
我不知道如何正确执行 Apache 身份验证要求。
我的网站有两个区域:
- 访问始终需要密码验证(/restricted 和 /cgi-bin/restricted)
- 可以根据本地 IP 地址(/local 和 /cgi-bin/local)允许访问
但是,我得到这些行为:
- 正确访问/restricted/index.html需要身份验证
- 正确访问/cgi-bin/restrict/需要身份验证
- 访问 /cgi-bin/restricted/target.cgi 不需要身份验证
所有这些测试确实是从允许访问 /local 和 /cgi-bin/local 的 IP 地址进行的,因此该限额可能会以某种方式超出,但肯定不应该这样做。
我的 VirtualHost 配置的相关部分是:(请注意,我目前<Location />
在 cgi-bin 部分中使用 s,我之前在相关 s 中具有所有要求<Directory />
,但根据我发现的其他建议将其取出;它没有影响。)
DocumentRoot /var/www
# HTML section
<Directory /var/www/restricted>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
AuthType Basic
AuthName "Restricted"
AuthBasicProvider file
AuthUserFile /etc/apache2/passwords
Require user username
</Directory>
<Directory "/var/www/local/">
Options Indexes FollowSymLinks
Order allow,deny
Allow from 192.168.1.0/24
Allow from 192.168.0.0/24
</Directory>
# CGI section
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin/resricted">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
</Directory>
<Location "/usr/lib/cgi-bin/restricted">
AuthType Basic
AuthName "Restricted"
AuthBasicProvider file
AuthUserFile /etc/apache2/passwords
Order allow,deny
Require user username
</Location>
<Directory "/usr/lib/cgi-bin/local">
AllowOverride None
Options +ExecCGI +SymLinksIfOwnerMatch -MultiViews
</Directory>
<Location "/usr/lib/cgi-bin/local">
Order allow,deny
Allow from 192.168.1.0/24
Allow from 192.168.0.0/24
</Location>
答案1
#<Location "/usr/lib/cgi-bin/restricted">
<Location "/cgi-bin/restricted">
#<Location "/usr/lib/cgi-bin/local">
<Location "/cgi-bin/local">
‘Location’指的是url中的路径,即主机名后面以/开头的部分,而不是fs dir。