<-
Apache HTTP 服务器 2.4 > 访问控制

访问控制

访问控制是指控制对任何资源的访问的任何方式。这与身份验证和授权是分开的。

支持Apache!

也可以看看

最佳

相关模块和指令

访问控制可以通过几个不同的模块来完成。其中最重要的是mod_authz_coremod_authz_host。本文档还讨论了使用的访问控制mod_rewrite

最佳

主机访问控制

如果您希望根据访问者的主机地址来限制对网站的某些部分的访问,最容易使用来完成 mod_authz_host

Require 提供了多种不同的方法来允许或拒绝对资源的访问。与,和指令一起使用时RequireAll,可以以任意复杂的方式组合这些要求,以强制执行您的访问策略。RequireAnyRequireNone

AllowDenyOrder指令,提供mod_access_compat,已被取消,就会消失在未来的版本。您应该避免使用它们,并避免推荐使用过时的教程。

这些指令的用法是:

Require host address
Require ip ip.address

在第一种形式中,地址是完全限定域名(或部分域名);如果需要,您可以提供多个地址或域名。

在第二种形式中,ip.address是IP地址,部分IP地址,网络/网络掩码对或网络/ nnn CIDR规范。可以使用IPv4或IPv6地址。

有关此语法的更多示例,请参见mod_authz_host文档

您可以插入not以否定特定需求。请注意,由于a not是值的取反,因此不能单独使用它来允许或拒绝请求,因为true 并不构成false。因此,要使用否定拒绝访问,该块必须具有一个评估为true或false的元素。例如,如果您有某人向您的留言板发送垃圾邮件,并且希望将其拒之门外,则可以执行以下操作:

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

来自该地址(10.252.46.165)的访问者将看不到该指令包含的内容。相反,如果您拥有计算机名称而不是IP地址,则可以使用该名称。

Require not host host.example.com
    

而且,如果您想阻止来自整个域的访问,则可以仅指定地址或域名的一部分:

Require not ip 192.168.205
Require not host phishers.example.com moreidiots.example
Require not host gov

使用的RequireAllRequireAnyRequireNone指令可以用来强制执行的要求更复杂的集合。

最佳

通过任意变量进行访问控制

使用<If>,您可以基于任意环境变量或请求标头值来允许或拒绝访问。例如,要基于用户代理(浏览器类型)拒绝访问,可以执行以下操作:

<If "%{HTTP_USER_AGENT} == 'BadBot'">
    Require all denied
</If>

使用Require expr语法,也可以写成:

Require expr %{HTTP_USER_AGENT} != 'BadBot'

警告:

by的访问控制User-Agent是一种不可靠的技术,因为User-Agent报头可以根据最终用户的要求而设置为任何值。

有关可以使用哪些表达式语法和变量的进一步讨论,请参见表达式文档

最佳

使用mod_rewrite进行访问控制

[F] RewriteRule标志导致发送403禁止响应。使用此功能,您可以基于任意条件拒绝对资源的访问。

例如,如果您希望在晚上8点至早上7点之间阻止对资源的访问,则可以使用进行此操作mod_rewrite

RewriteEngine On
RewriteCond "%{TIME_HOUR}" ">=20" [OR]
RewriteCond "%{TIME_HOUR}" "<07"
RewriteRule "^/fridge"     "-" [F]

对于晚上8点之后或早上7点之前的任何请求,这将返回403禁止响应。此技术可用于您希望检查的任何条件。如果首选该方法,则也可以重定向或重写这些请求。

<If>在2.4中添加的指令代替了mod_rewrite传统上用来做的许多事情,在使用mod_rewrite之前,您可能应该先看一下。

最佳

更多信息

表达式引擎给你权力做了各种基于任意服务器变量的东西大量,您应该咨询该文件的更多细节。

另外,您应该阅读mod_authz_core 文档以获取组合多个访问要求并指定它们如何交互的示例。

另请参阅“ 身份验证和授权”方法

可用语言: zh  |  es  |  fr 

最佳

注释

注意:
这不是“问答”部分。此处放置的评论应指向有关改进文档或服务器的建议,如果实施或被认为无效/偏离主题,我们的主持人可以将其删除。有关如何管理Apache HTTP Server的问题,应直接指向我们的IRC频道#httpd(位于Freenode上),或发送至我们的邮件列表
目前,此页面已禁用评论。