Recently I came along the need of having access to some intranet site based on IP or if the IP was outside the LAN apache should prompt for a username/password.
It took me some time to figure out, but this can be done by the satisfy
option. So I now have in my apache-config the next configuration:
<Directory "/usr/local/www/intranet">
Options Indexes FollowSymlinks MultiViews
AllowOverride None
order deny,allow
deny from all
# Allow LAN Location A
allow from 172.16.2.0/24
# Allow LAN Location B
allow from 172.16.3.0/24
# Allow VPN-subnet
allow from 172.16.250.0/24
# Username/password request
AuthType Basic
AuthName "Example.Com Intranet"
AuthUserFile /usr/local/etc/intranet/webusers.pwl
require valid-user
# Allow or require must be satisfied
Satisfy any
</Directory>
And it is working well, if you're from outside the defined subnets... you need to enter your username/password.