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


156

我试图拒绝所有内容,只允许使用一个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>

有没有办法使这项工作?

Answers:


356
order deny,allow
deny from all
allow from <your ip> 

95
注意!Apache对htaccess中的空格敏感。不允许之间有任何空格。即不要写命令拒绝,允许。
H.Rabiee 2013年

2
信息:-它也适用于IPv6!只需添加另一行allow from yourIPv6
jave.web,2013年

Nginx中可能吗?
shgnInc

10
关于2.4 docs的注释mod_access_compat提供的Allow,Deny和Order指令已被弃用,并将在以后的版本中删除。您应该避免使用它们,并避免推荐使用过时的教程。
马丁·施耐德

4
正如@ MA-Maddin指出的,-不建议使用mod_access_compat。这篇文章显示了如何在较新版本中进行操作。而且,如果服务器使用的是代理服务器,则还应该考虑,因为那样会显示访问者的代理服务器IP。这篇文章提出了解决方案。
Zeth,

115

我知道这个问题已经有了可接受的答案,但是Apache文档说:

mod_access_compat提供的Allow,Deny和Order指令已被弃用,并将在以后的版本中删除。您应该避免使用它们,并避免推荐使用过时的教程。

因此,一个更适合未来的答案是:

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

希望我能帮助阻止该页面成为那些“过时的教程”之一。:)


我们将IP放在哪里?
加里·卡莱尔·库克

1
要走的路!这是可以接受的解决方案,因为它不仅有效而且可靠。
6opko

另一个答案对我的情况没有帮助。但是,这个做到了。感谢您更新旧线程。
约翰·戴克

1
该答案的示例允许从两个IP访问?那么,要添加多个IP,我们只是在它们之间放置一个空格?您可以放置Require ip多行以提高用户可读性,还是必须将所有IP都放在一行上?
Hastig Zusammenstellen

如果使用此方法,您将如何像某些答案一样重定向到新的临时页面?
rudtek


32

上述内容的略微修改版本,其中包括一个自定义页面,该页面将显示给被拒绝访问的用户:

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

...这样,那些不是来自111.222.333.444的请求就会看到specific_page.html

(将其发布为评论看起来很糟糕,因为会丢失新行)


你好 我的代码与您的.htaccess中的代码完全相同,但是我不断收到500错误。我指定的页面将被调用,test.html并且与所在的文件夹相同.htaccess。但是,我看不到日志(服务器不允许)。你知道为什么我会有这个问题吗?当我通过ftp客户端获取文件的路径时,它会告诉我,/test.html因此路径应该不是问题,对吗?
Musterknabe 2015年

另外,即使我注释掉错误文档所在的行,也会出现500错误。因此,这不应该是问题。是否有其他三行无法工作的原因?在我的.htaccess中,我还有三行内容,我将非www重定向到www,但是仅此而已。但我也发现了错误,当我只有三行,拒绝,允许,等等
Musterknabe

如何添加自定义网址?
secondsight

8

对以前的答案进行了一些改进,在您执行站点更改时可以向用户显示维护页面:

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

哪里:


当我使用ErrorDocument 403时,该maintenance.html文件又收到403错误,因为它都无法访问该文件。您有解决方案吗?
Zdravko Donev

3

除了@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>

First line allows all
Second line blocks from 10.0.0.0 to 10.255.255.255
Third line blocks from 172.16.0.0 to 172.31.255.255
Fourth line blocks from 192.168.0.0 to 192.168.255.255

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


谢谢,这是处理Apache 2.4的正确方法!
AleksandarPavić

2

您可以在htaccess中使用以下内容来允许和拒绝访问您的网站:

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

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

如果客户端IP地址与模式匹配,我们首先设置一个env变量allowedip,如果模式匹配,则为env变量allowedip分配值1

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

更换 1\.2\.3\.4\.5为您允许的IP地址。

引用:


1
用这个代替324.234.22.1的Allow的优点是什么?
Berry M.

2

我无法使用403方法,因为我想将维护页面和页面图像放在服务器上的子文件夹中,因此使用以下方法将单个IP *以外的所有人重定向到“维护页面” *

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

来源:创建一个隐藏页面以隐藏您的WordPress博客


这个解决方案是最简单的-我更喜欢
Gerfried

1

您可以拥有多个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


0

在.htaccess文件中添加以下命令。并将该文件放在您的htdocs文件夹中。

Order Deny,Allow
Deny from all
Allow from <your ip> 
Allow from <another ip> 

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

对我来说,这似乎可行(使用IPv6而不是IPv4)我不知道对于某些网站这是否有所不同,但对我而言,这可行。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.