How to configure tri-state Allow/Deny-from + HTTP Basic Auth combo?

Nutchanon Wetchasit <[email protected]> Tue, 16 Dec 2025 17:32:20 +0700
Newsgroups gmane.comp.apache.user
Message-ID <[email protected]>
Hello folks,

I'm using shared hosting based on Apache 2.4, and I have been using
the old-school `mod_access_compat` access-control directives
`Allow from` and `Deny from` for some years now; they work okay
and are straighforward to read and understand.

However, I found that when I used these in combination with
HTTP Basic Authentication, even under the control of `Satisfy` directive,
only allowed a 2 states of entry allowance in `Satisfy` configuration:

- `Satisfy any`:  let in if allowed, authenticate if denied
- `Satisfy both`: authenticate if allowed, reject if denied

I'm currently using the latter style in some part of my site
(with `Order Allow,Deny` precedence); but it is not ideal,
because I actually would like to *also* let requests
from whitelisted locations to also bypass the "authentication" [1] entirely,
which would make the check tri-state:

A. If `Allow from` (or its newer equivalent) matches the request,
   bypass the HTTP Basic authentication and allow the request in.

B. If `Deny from` (or its newer equivalent) matches the request,
   fail the request with 403 response, *without* ever allowing it
   to authenicate to bypass this restriction.

C. If neither matched, then present a 401 response requesting credential
   for HTTP Basic authentication.

I have read relevant parts of 2.4's `mod_access_compat` documentation [2]
several times, and I couldn't find a way to configure tri-state
access control in the manner I described above.

So I would like to ask: how to configure Apache HTTPd 2.4
to do this kind of tri-state access control based on remote IP address
and HTTP Basic Authentication (using old-style `Allow from`/`Deny from`
or newer `Require` notwithstanding)?

Or is this being impossible and I'd have to resort to roll-my-own
last-ditch option in order to do so? [3]

Thanks in advance,
Nutchanon Wetchasit


[1] I'm scare-quoting "authentication", because I'm (ab)using this for
non-authentication uses where things entered were not secret:
it is rather for gauging user's ability to understand what's on the page
and take unusual action based on what he understood.

^ There is a specific all-caps C-word term that describe this technique,
  but I'm intentionally not writing it here to prevent this email
  from becoming searchable to unsavory people aiming to circumvent this.

(And the reason that HTTP Basic Authentication is used for this is exactly
because it is *not* intended for this task; and also because it could be
set up solely via server configuration directives without having to
write additional CGI programs or install third-party software,
nor having to maintain session cookie)

[2]
https://httpd.apache.org/docs/2.4/mod/mod_access_compat.html

[3]
While it is possible to implement this less-usual kind of tri-state ACL
using CGI program that produces internal-forwarding `Location: `
response line; I would prefer to relegate that as a last-resort measure,
since it involves reinventing many wheels (partially re-parsing
the `.htaccess` file), as well as the clash with complex `mod_rewrite` rules
I additionally use (many of them depend on $REDIRECT_STATUS
internal environment variable-- which CGI-issued redirections would bungle).