拒绝所有,只允许一个IP通过htaccess

时间:2010-12-09 15:50:56

标签: .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>

有没有办法让这项工作?

12 个答案:

答案 0 :(得分:333)

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

答案 1 :(得分:90)

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

  

mod_access_compat提供的Allow,Deny和Order指令,   已弃用,将在未来的版本中消失。你应该避免   使用它们,并避免过时的教程建议使用它们。

因此,更具前瞻性的答案是:

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

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

答案 2 :(得分:37)

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

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

答案 3 :(得分:29)

上述版本略有修改,包括向被拒绝访问的人显示的自定义页面:

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

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

(发布此评论看起来很糟糕,因为新线路丢失了)

答案 4 :(得分:8)

进一步提高以前的答案,在您对网站进行更改时,可以向您的用户显示维护页面:

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

其中:

答案 5 :(得分: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 < / strong>。

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

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

参考:

答案 6 :(得分:2)

除了@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需求。

答案 7 :(得分:1)

我无法使用403方法,因为我希望维护页面和页面图像位于我服务器上的子文件夹中,因此使用以下方法重定向到每个人的“维护页面”,但只有一个IP *

let

来源:Creating a holding page to hide your WordPress blog

答案 8 :(得分: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

答案 9 :(得分:0)

如果要使用mod_rewrite进行访问控制,可以使用用户代理,http引用,远程地址等条件。

示例

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

Refrences:

答案 10 :(得分:0)

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

- 2

答案 11 :(得分:0)

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

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