我有一个 URL http://example.com/web/en/press-release/
。如何阻止所有用户访问和查看该页面以及http://localhost:10004/web/en/press-release/*
使用.htaccess
?
我希望它们只能从特定的 IP 访问。
我确实喜欢这个,但没有效果。
# Press Release Blocked Now
RewriteCond %{HTTP_REFERER} web/en/press-release/ [NC,OR]
RewriteRule .* - [F]
答案1
如果你必须使用.htaccess
文件你应该知道它们的局限性:
.htaccess
文件(或“分布式配置文件”)提供了一种基于每个目录进行配置更改的方法。包含一个或多个配置指令的文件放置在特定的文档目录中,并且这些指令适用于该目录及其所有子目录。
这意味着您可以控制文件系统容器而不是网络空间容器,并且该配置默认适用于所有子目录。因此,为了实现您的目标,您必须将文件放置.htaccess
到与 URL 路径对应的文件系统路径中/web/en/press-release/
。
如果/web/en/press-release/
两者上的localhost:10004
和example.com
都指向同一个目录,并且两者都使用 Apache 直接从文件系统提供服务(即它不是反向代理),文件系统上下文是一个不错的选择。从配置部分:何时使用什么:
在文件系统容器和网络空间容器之间进行选择其实相当容易。当将指令应用于驻留在文件系统中的对象时,请始终使用
<Directory>
或<Files>
。当将指令应用于不驻留在文件系统中的对象(例如从数据库生成的网页)时,请使用<Location>
。尝试限制对文件系统中对象的访问时,切勿使用此选项
<Location>
。这是因为许多不同的网络空间位置 (URL) 可能映射到同一文件系统位置,从而允许规避您的限制。
代替使用 mod_rewrite 控制访问,Apache 有直接访问控制指令。使用它们更直接,并使您的配置更易于阅读和管理。Require
指示从mod_authz_core有ip
:
Require ip 192.0.2.100
Require ip 198.51.100.0/24
Require ip 2001:DB8:C0F:FEE::/64