Apache 2.4将URL限制为某些IP


14

我试图将特定的URL限制为只能在特定IP地址的网络外部使用。当外部用户尝试访问该URL而不是从IP列表访问时,应将其重定向到首页。

到目前为止,这是我尝试过的一切。最后一部分将所有用户重定向到首页,而不管IP。

<Location "/secret">
#    <If "%{REMOTE_ADDR} != -ipmatch '123.123.123.123/255.255.255.255'">
#    Redirect 303 "/secret" /
#    </If>

RewriteCond "%{REMOTE_ADDR}" "!123\.123\.123\.123"
RewriteRule .* / [R,L]

LogLevel debug rewrite:trace6
</Location>

PS:/ secret URL实际上是一个虚拟URL,并且实际上不在驱动器上。


If语句被注释掉了吗?启用重写- RewriteEngine On吗?
user9517 2015年

<If>语句是我尝试的一个版本。RewriteEngine On指令已在前面声明。这就是重定向所有人的原因
Denis Rendler

1
我认为您应该取消选中所选答案的标记,因为它对于您所要求的Apache 2.4无效(它向经过的人提供错误的信息)
Erenor Paz

Answers:


4

使用OrderDenyallow指定谁有权访问你的虚拟主机或位置。

<VirtualHost *:80>
    ServerName example.net
    DocumentRoot /docroot

    <Directory "/docroot">
        Order Deny,Allow
        Deny from all
        Allow from 10.10.10.10
        Allow from 10.10.11.0/24
    </Directory>   
</VirtualHost>

关于重定向,请考虑自定义错误页面。这是更普遍的做法,因为每个未经授权的访问都应该引发403错误,因此可以轻松进行评估。

我从来没有用apache做这个,而是在nginx上使用了这个策略。对于apachein这样的事情应该做:

ErrorDocument 403 http://homepage.example.com

使用ErrorDocument指令配置自定义错误文档,该指令可在全局,虚拟主机或目录上下文中使用。如果AllowOverride设置为FileInfo,则可以在.htaccess文件中使用它。(来自apache文档)


2
这看起来像一组Apache httpd 2.2配置。它仍然可以在2.4上使用吗?
user9517 2015年

至少ErrorDocument一部分来自2.4文档。我不使用apache,因为nginx在周围,但是假设OrderDeny并且Allow仍然在apache 2.4中
ansi_lumen

谢谢,但我没有帮助。我忘记提及了,但是我更新了问题,/ secret URL实际上是一个虚拟URL,并且实际上不在驱动器上。它本身的URL是从index.php重写的,这就是为什么我使用<Location>指令的原因。
Denis Rendler

4
此语法在Apache 2.4中已弃用
Luca Reghellin

1
为什么这是公认的答案?这是针对Apache 2.2的,而不是问题所暗示的2.4。
杰里米(Jeremy),

23

“订购”,“拒绝”和“允许”选项已在Apache 2.4中替换为

<Directory /var/www/mysite.com/htdocs/public>
    Require all granted
</Directory>

您可以通过使用以下内容来明确限制地址:

<Directory /var/www/mysite.com/htdocs/public>
    Require all granted
    Require not ip 192.168.0.1
</Directory>

完全相反也是如此,要限制全部并且仅允许子集使用以下内容:

<Directory /var/www/mysite.com/htdocs/public>
    Require host example.com
    Require ip 192.168.0.1
</Directory>

有关更多信息,请参见Apache 2.4访问控制文档。

关于您的问题(由于缺少要添加评论的要点,我对此进行了编辑),您应该能够简单地设置一个ErrorDocument并将索引设置为URL路径:

<Directory /var/www/mysite.com/htdocs/public>
    Require host example.com
    Require ip 192.168.0.1
    ErrorDocument 401 /index.html
</Directory>

希望这可以帮助!


谢谢@Linztm!但这只能部分解决我的问题。我不仅要阻止用户,还要将他重定向到主页。
Denis Rendler

仅当我提供包括域和协议的完整URL时,它似乎才可以使用ErrorDocument指令。我将进一步研究。谢谢。
丹尼斯·伦德勒

我发现至少有一种情况需要使用,allow尽管Require 127.0.0.1 仍然不建议使用,但仍然允许通过本地计算机的外部地址进行访问,而允许语法仅允许使用127地址。
阿列克谢·马蒂安诺夫

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.