语境
我正在运行 Apache/2.4.38 (Debian) 服务器。以下是我的
/var/www/html/.htaccess
AuthType Basic
AuthName "Restricted Content"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
和我的 /etc/apache2/apache2.conf
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
使用此功能时,用户必须输入登录名和密码才能访问网站。一切正常!
当我使用时 AllowOverride None
,没有人需要输入任何内容。
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
问题
如何允许从特定 IP(或域名)进行访问,以便用户无需输入登录名/密码?理想情况下,我希望允许从特定域进行访问(https://mxtoolbox.com/SuperTool.aspx?action=a%3abiosoft-ipcms.fr&run=toolpage) 仅有的。
答案1
与其将配置拆分到服务器配置和 .htaccess 文件之间,不如将所有内容都保存在服务器配置中,这样维护起来会更轻松,执行起来也会更快。然后,您可以将以下内容放入服务器配置中:
<Directory /var/www>
Require all granted
</Directory>
<Directory /var/www/html>
AuthType Basic
AuthName "Restricted Content"
AuthUserFile /etc/apache2/.htpasswd
<RequireAny>
Require valid-user
Require ip ...
</RequireAny>
</Directory>
在其中插入要允许的源主机的 IP 地址。如果您只想允许来自特定引荐来源 URL 的请求,还可以添加类似
Require expr "%{HTTP_REFERER} == ..."
但要意识到请求者可以将 Referer 标头设置为他们想要的任何值,所以这是不安全的。
请参阅文档要求,RequireAny, 和表达式。