Apache 2.4将URL限制在某些IP地址

我正试图限制一个特定的URL在networking外部只能用于特定的IP地址。 当外面的用户尝试访问该URL而不是IP列表时,他应该被redirect到主页。

这是我迄今为止尝试没有任何运气。 最后一部分将所有人redirect到主页,而不pipeIP。

<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,并不存在于硬盘上。

使用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> 

当涉及redirect时,请考虑自定义错误页面 。 这是更一般的,因为每一个未经授权的访问应该引发一个403错误,因此可以很容易地评估。

我从来没有这样做过,但用nginx来实现这个策略。 对于Apache这样的事情应该这样做:

 ErrorDocument 403 http://homepage.example.com 

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

“订单”,“拒绝”和“允许”选项已在Apache 2.4中被replace

 <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的索引设置为URLpath:

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

希望这可以帮助!