相关模块和指令
访问控制可以由几个不同的模块完成。 其中最重要的是mod_authz_core和mod_authz_host。 本文还讨论了使用mod_rewrite的访问控制。
主机访问控制
如果您希望根据访问者的主机地址限制访问您网站的部分内容,那么使用mod_authz_host完成访问最容易。
“Require”提供了多种不同的方式来允许或拒绝访问资源。 结合RequireAll,RequireAny和RequireNone指令,这些要求可以以任意复杂的方式组合,以执行您的访问策略所发生的任何事情。
由mod_access_compat提供的“Allow”,“Deny”和“Order”指令已被弃用,并将在以后的版本中消失。 你应该避免使用它们,并避免推荐使用过时的教程。
这些指令的用法是:
Require host address
Require ip ip.address```
在第一种形式中,***address***是一个完全限定域名(或部分域名); 如果需要,您可以提供多个地址或域名。
在第二种形式中,***ip.address***是IP地址,部分IP地址,网络/网络掩码对或网络/ nnn CIDR规范。 可以使用IPv4或IPv6地址。
有关此语法的进一步示例,请参阅[mod_authz_host文档](https://httpd.apache.org/docs/2.4/en/mod/mod_authz_host.html#requiredirectives)。
您可以插入not来否定特定要求。 请注意,由于not是值的否定,它本身不能用于允许或拒绝请求,就像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```
可以使用RequireAll,RequireAny和RequireNone指令来执行更复杂的需求集。
任意变量访问控制
[F] RewriteRule标志会导致403 Forbidden响应被发送。 使用它,您可以根据任意条件拒绝对资源的访问。
例如,如果您希望在晚上8点至6点之间阻止访问资源,可以使用mod_rewrite进行访问。
RewriteEngine On
RewriteCond "%{TIME_HOUR}" ">=20" [OR]
RewriteCond "%{TIME_HOUR}" "<07"
RewriteRule "^/fridge" "-" [F]```
这将在晚上8点或上午7点之前返回403 Forbidden回应。 该技术可用于您希望检查的任何标准。 如果该方法是首选,您还可以重定向或以其他方式重写这些请求。
2.4中添加的<If>指令代替了mod_rewrite传统上习惯做的许多事情,您应该在使用mod_rewrite之前先看看。
##More information
[expression engine](https://httpd.apache.org/docs/2.4/en/expr.html)为您提供了大量基于任意服务器变量执行各种功能的功能,您应该查阅该文档以获取更多详细信息。
此外,您应该阅读[mod_authz_core](https://httpd.apache.org/docs/2.4/en/mod/mod_authz_core.html)文档,了解组合多个访问需求并指定它们如何交互的示例。
另见[Authentication and Authorization](https://httpd.apache.org/docs/2.4/en/howto/auth.html) howto。
网友评论