通过向不知名的IP发送404来隐藏HTTPauthentication领域?

我有一个Apache(2.2)在example.com上提供web应用程序。 该web应用程序有一个可通过example.com/debug访问的debugging页面。 /debug当前受到HTTP基本身份validation的保护。 由于只有非常小的用户可以访问debugging页面,所以我想根据IP地址来隐藏它,并将404返回给不能从我们的VPN访问的客户端。

仅基于IP地址提供404服务非常简单,详见https://serverfault.com/a/13071 。 但是,一旦我添加authentication,用户看到一个401而不是一个404

基本上,我需要的是:

 if ($REMOTE_ADDR ~ 10.11.12.*): do_basic_auth (aka return 401) else: return 404 

更新这个工程:

 <VirtualHost ...> ... SetEnvIf REMOTE_ADDR 10.128.0.* HAS_debug=1 SetEnvIf REMOTE_ADDR 10.128.1.* HAS_debug=1 SetEnvIf REMOTE_ADDR 10.128.2.* HAS_debug=1 RewriteEngine On RewriteCond %{ENV:HAS_debug} !=1 RewriteRule ^/debug($|/) - [R=404,L] <Location /debug> AuthType Basic AuthName "hidden-debug" AuthUserFile ... Require valid-user </Location> </VirtualHost> 

关键部分是在场外改写。

如果您不介意启用mod_rewrite,则可以通过重写debugging目录的请求(在父目录的.htaccess中)来隐藏未知IP的目录,以在IP未知的情况下返回404,并保留标准基本validation.htaccess在您的debugging目录进行身份validation的用户。

 RewriteEngine on RewriteCond %{REMOTE_ADDR} !=<vpn ip> RewriteRule ^debug($|/) - [L,R=404] 

(这个例子直接取消了返回404代码,当我search你需要的确切语法时,发现未经授权的尝试 )