Apache 2.4 访问控制指令的优雅转换(摆脱 mod_access_compat)

Apache 2.4 访问控制指令的优雅转换(摆脱 mod_access_compat)

根据个人经验和文档,在配置中混合新旧访问控制指令可能会出现问题,例如

老的:

Order deny,allow
Deny from all
# ...

新的:

Require all denied

从技术上讲,将旧指令(如 Order、Allow 或 Deny)与新指令(如 Require)混合使用是可行的,但不建议这样做。mod_access_compat 的创建是为了支持仅包含旧指令的配置,以方便 2.4 升级。请查看以下示例以更好地了解可能出现的问题。

...

在以下示例中,混合使用新旧指令会导致意外结果。

升级到 2.4

我想转换为新指令。在一个批处理中完成此操作然后重新加载似乎是个好主意。但是,有些指令位于 .htaccess 文件中。

文档:

答案1

我建议将 .htaccess 文件中的指令更改为类似以下内容:

例子(您可能需要检查模块在您的系统上的命名方式,例如 mod_access_compat、access_compat_module):

<IfModule access_compat_module>
    Order deny,allow
    Deny from all
</IfModule>

<IfModule !access_compat_module>
    Require all denied
</IfModule>

文档:模块

其余配置也可以通过这种方式完成,或者可以一次性完成,随后重新加载而不使用 Ifmodules(为了不使配置混乱)。

一旦 access_compat 模块被停用,新的指令就会生效。


或者,您可能需要考虑将配置从 .htaccess 文件移动到您的 Web 服务器配置,请参阅:

如果您有权访问 httpd 主服务器配置文件,则应完全避免使用 .htaccess 文件。

https://httpd.apache.org/docs/2.4/howto/htaccess.html

相关内容