注意:这不是重复的,因为标记的帖子涉及旧版本的 Apache。我尝试过该线程中的解决方案,也尝试过应该适用于更高版本的解决方案,但没有成功。
有几个问题和答案涉及这个问题的部分内容,但我还没有发现确切的这种情况。
我有一个网站,我想从我的 10.0.0.0 网络公开访问该网站。但是当通过路由器转发的外部地址访问该网站时 - 我希望 .htaccess 需要登录。
我知道如何要求所有连接都输入密码,并且我知道允许/禁止特定地址或 IP。但我希望所有不在 LAN 上的 IP 都需要登录名/密码。
更新:Apache2 版本 2.2.22
当我尝试根据某人声称与之重复的答案进行解决方案时,发生了以下情况:
AuthName "Authenticate"
AuthType Basic
AuthUserFile "/home/frank/.htpassword"
Require valid-user
Order allow,deny
Allow from 10.0.0.44
Satisfy All
使用上述 .htaccess 文件,通过外部地址的访问被拒绝,就是这样。没有登录提示。从特定的本地 IP(.44),我得到了登录提示。
AuthName "Authenticate"
AuthType Basic
AuthUserFile "/home/frank/.htpassword"
Require valid-user
Order allow,deny
Allow from 10.0.0.0/8
Satisfy All
通过上述操作,外部和内部连接均会提示登录。
尝试缩小问题范围:
这不起作用:(外部和 LAN 地址均允许)
Order Deny,Allow
Deny from all
Allow from 10.0.0.0/8
这是可行的:(外部地址被拒绝访问,而 LAN 不会)
Order Deny,Allow
Deny from all
Allow from 10.0.0.44
更新: 我是否遗漏了一些基本的东西?
当我尝试这个时:
Order Deny,Allow
Deny from all
一切都被拒绝,无论是来自 LAN 还是外部地址。
但是,当我尝试这样做时:
Order Deny,Allow
Allow from 127.0.0.1
一切都是允许的,无论是来自 LAN 还是外部地址。
问题出在我尝试从永久地址访问的方式上吗?域“mydomain.no”的名称服务器指向路由器。我已在路由器的虚拟服务器中转发域“mydomain.no”。端口 80 上的流量被路由到运行 apache2 安装的服务器。我想要的是所有通过地址“mydomain.no”(以及转发到同一服务器的任何其他域)的流量都需要密码。来自 LAN 内部的流量不需要密码。
答案1
我假设您正在使用 Apache 2.4,对于 Apache 2.2,语法是不同的。
您可以添加多个Require
指令:
AuthName "Authenticate"
AuthType Basic
AuthUserFile "/var/www/html/.htpasswd"
<RequireAny>
Require valid-user
Require ip 10.0.0
</RequireAny>
从技术上讲,你甚至不需要<RequireAny>
,当它不存在时,apache 会隐式地使用它,但我发现这样更容易读取。
相当于 Apache 2.2:
AuthName "Authenticate"
AuthType Basic
AuthUserFile "/var/www/html/.htpasswd"
Require valid-user
Order allow,deny
Allow from 10.0.0
Satisfy any