.htaccess 从文件或文件目录中获取 IP 列表

.htaccess 从文件或文件目录中获取 IP 列表

我阻止某些垃圾邮件发送者/机器人通过 IP 地址访问我的网站,但我有大约 3 个目录(/var/www/directory1、/var/www/directory2、/var/www/directory3)。

每次我想要阻止一个 IP,我都需要进入每个目录的 .htaccess 并手动添加 IP 地址。

有没有办法从文件中加载 IP 地址,这样我只需要更改 1 个位置?我尝试将 .htaccess 放入 (/var/www),但它不起作用。

就上下文而言,我的每个 .htaccess 都有类似下面的内容

<RequireAll>
    Require all granted
    Require not ip 123.123.123.123
    Require not ip 234.234.234.234
</RequireAll>

我想要实现类似

<RequireAll>
    Require all granted
    Require not ip file_that_contains_list_of_ip
</RequireAll>

或者是否有其他适合我的用例的更好的解决方案?

*免责声明:我不能使用软链接/符号链接,因为每个目录的文件略有不同。

谢谢。

答案1

根据 Apache 的文档这里似乎可以使用父目录中的一个 .htaccess。
默认情况下,它可能启用也可能不启用。
如果您可以控制 Apache 配置,则可能需要使用文档中提到的那些设置。
但请注意,正如文档所述,它可能会影响性能,因为每次命中都会创建额外的 .htaccess 文件查找:

第一个是性能。当 AllowOverride 设置为允许使用 .htaccess 文件时,httpd 将在每个目录中查找 .htaccess 文件。因此,允许 .htaccess 文件会导致性能下降,无论您是否实际使用它们!此外,每次请求文档时都会加载 .htaccess 文件。

还要注意的是,httpd 必须在所有更高级别的目录中查找 .htaccess 文件,以便获得必须应用的完整指令。(请参阅有关如何应用指令的部分。)因此,如果请求目录 /www/htdocs/example 之外的文件,httpd 必须查找以下文件:

/.htaccess
/www/.htaccess
/www/htdocs/.htaccess
/www/htdocs/example/.htaccess

因此,对于该目录外的每个文件访问,即使不存在任何这些文件,也会有 4 个额外的文件系统访问。(请注意,只有在为 / 启用了 .htaccess 文件时才会出现这种情况,但通常情况并非如此。)

相关内容