.htaccess:允许来自本地网络的所有连接,但要求外部网络登录

.htaccess:允许来自本地网络的所有连接,但要求外部网络登录

注意:这不是重复的,因为标记的帖子涉及旧版本的 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

相关内容