全部拒绝,只允许一个 IP 通过 htaccess

我试图否认一切,只允许一个 IP 地址。但是,我希望下面的 htaccess 能够为这个单独的 IP 工作。我没有找到两者兼顾的方法: 拒绝一切,只允许一个,加上以下选项:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /


#Removes access to the system folder by users.
#Additionally this will allow you to create a System.php controller,
#previously this would not have been possible.
#'system' can be replaced if you have renamed your system folder.
RewriteCond %{REQUEST_URI} ^system.*
RewriteRule ^(.*)$ /index.php?/$1 [L]


#When your application folder isn't in the system folder
#This snippet prevents user access to the application folder
#Submitted by: Fabdrol
#Rename 'application' to your applications folder name.
RewriteCond %{REQUEST_URI} ^application.*
RewriteRule ^(.*)$ /index.php?/$1 [L]


#Checks to see if the user is attempting to access a valid file,
#such as an image or css document, if this isn't true it sends the
#request to index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]
</IfModule>


<IfModule !mod_rewrite.c>
# If we don't have mod_rewrite installed, all 404's
# can be sent to index.php, and everything works as normal.
# Submitted by: ElliotHaughin


ErrorDocument 404 /index.php
</IfModule>

有办法解决吗?

550584 次浏览
order deny,allow
deny from all
allow from <your ip>

稍作修改的上述版本,包括一个自定义页面,显示给那些被拒绝访问的人:

ErrorDocument 403 /specific_page.html
order deny,allow
deny from all
allow from 111.222.333.444

... 这样那些不是来自111.222.333.444的请求就会看到 special _ page. html

(把这个作为评论贴出来看起来很糟糕,因为新的一行丢失了)

这可以通过使用为该任务设计的指令来改进。

ErrorDocument 403 /specific_page.html
Order Allow,Deny
Allow from 111.222.333.444

其中111.222.333.444是您的静态 IP 地址。

当使用“ Order Allow,Deny”指令时,请求必须匹配“ Allow”或“ Deny”,如果两者都未满足,则拒绝请求。

Http://httpd.apache.org/docs/2.2/mod/mod_authz_host.html#order

你可以使用下面的 htaccess 来允许和拒绝访问你的网站:

SetEnvIf remote_addr ^1\.2\3\.4\.5$ allowedip=1


Order deny,allow
deny from all
allow from env=allowedip

我们首先设置一个 env 变量 允许蘸酱,如果客户端 ip 地址与模式匹配,如果模式匹配,那么将 env 变量 允许蘸酱赋值为 1

在下一步中,我们使用“允许、拒绝”指令来允许和拒绝对站点的访问。Order deny,allow表示 denyallow的顺序。deny from all这一行告诉服务器拒绝所有人。最后一行 allow from env=allowedip允许访问我们为 env 变量设置的单个 ip 地址。

用允许的 IP 地址替换 1\.2\.3\.4\.5

参考文献:

我知道这个问题已经有了公认的答案,但 Apache 文档表示:

Mod _ access _ compat 提供的“允许”、“拒绝”和“订单”指令, 在将来的版本中将会消失。你应该避免 使用它们,并避免过时的教程建议使用它们。

因此,一个更加未来化的答案应该是:

<RequireAll>
Require ip xx.xx.xx.xx yy.yy.yy.yy
</RequireAll>

希望我已经帮助防止这个页面成为那些“过时的教程”之一。 :)

稍微改进一下之前的答案,当您对站点执行更改时,可以向用户显示一个维护页面:

ErrorDocument 403 /maintenance.html
Order Allow,Deny
Allow from #.#.#.#

地点:

如果你想使用 mod _ rewrite 进行访问控制,你可以使用用户代理、 http 引用、远程地址等条件。

例子

RewriteCond %{REMOTE_ADDR} !=*.*.*.* #you ip address
RewriteRule ^$ - [F]

参考文献:

我不能使用403方法,因为我想在我的服务器上的子文件夹的维护页面和页面图像,所以使用以下方法重定向到一个“维护页面”的每个人,但一个单一的 IP *

RewriteEngine on
RewriteCond %{REMOTE_ADDR} !**.**.**.*
RewriteRule !^maintenance/ http://www.website.co.uk/maintenance/ [R=302,L]

资料来源: 创建一个保存页面来隐藏你的 WordPress 博客

您可以有一个以上的 IP,甚至一些其他类型的允许,如用户,主机名,... 更多的信息在这里 https://www.askapache.com/htaccess/setenvif/

SetEnvIf remote_addr ^123.123.123.1$ allowedip=1
SetEnvIf remote_addr ^123.123.123.2$ allowedip=1
SetEnvIf remote_addr ^123.123.123.3$ allowedip=1
SetEnvIf remote_addr ^123.123.123.4$ allowedip=1


Order deny,allow
deny from all
allow from env=allowedip

除了@David Brown 的回答之外,如果你想要屏蔽一个 IP,你必须首先允许所有的 IP,然后像这样屏蔽 IP:

<RequireAll>
Require all granted
Require not ip 10.0.0.0/255.0.0.0
Require not ip 172.16.0.0/12
Require not ip 192.168
</RequireAll>
  • 第一行允许所有人
  • 10.0.0.010.255.255.255的第二行块
  • 172.16.0.0172.31.255.255的第三行块
  • 第四行块从 192.168.0.0192.168.255.255

您可以使用上面提到的任何符号来满足您的 CIDR 需求。

在.htaccess 文件中添加以下命令。

Order Deny,Allow
Deny from all
Allow from <your ip>
Allow from <another ip>
ErrorDocument 403 /maintenance.html
Order Allow,Deny
Allow from #:#:#:#:#:#


对我来说,这似乎工作(使用 IPv6而不是 IPv4) ,我不知道这是否不同的一些网站,但我的工作。

order deny,allow
deny from all
allow from set your IP

使用 htaccess 限制 ip 访问