I need to apply HTTP auth just in public use of website, but I don\'t apply it on my localhost. This is the .htaccess that I think should work. But it doesn\'t work
In Apache 2.4, allow, deny and satisfy are not used anymore, IP address restriction is also done with require now:
AuthUserFile /path/to/.htpasswd
AuthName "Restricted Access"
AuthType Basic
Require ip 127.0.0.1
Require valid-user
If any of the "Require" directives are fulfilled, the request is allowed. If you want to require both, group them in a <RequireAll> block.
For restriction to local access you can use the special syntax Require local instead of Require ip 127.0.0.1
Read more: http://httpd.apache.org/docs/2.4/mod/mod_authz_core.html#require
You need to look at the order and satisfy keywords. Working example from my website is below. First we tell that we accept either the IP or USER. Then we define htpasswd file path and that we accept any valid user from that file. Finally we define which client IP addresses can access our web without auth (we deny all other IPs, so that they must auth via htpasswd).
# permit by USER || IP Satisfy any # USER AuthUserFile /var/www/munin/.htpasswd AuthGroupFile /dev/null AuthName "Password Protected Area" AuthType Basic require valid-user # IP order deny,allow deny from all allow from 11.22.33.