On my server I have the following .htaccess file:
DirectoryIndex index.php
AuthType Basic
AuthName "Password Required"
AuthUserFile /var/www/webinterface/.htpasswd
Options +FollowSymLinks
Require valid-user
<Files index.php>
Satisfy any
Allow from *
</Files>
If I request the URL "IP-ADDRESS/index.php", everything works fine, I get the index.php displayed without an authentication prompt. However as soon as I request "IP-ADDRESS/" the browser asks me for my credentials.
Why is this the case? What am I missing?
HTTP authentication with PHP. It is possible to use the header () function to send an "Authentication Required" message to the client browser causing it to pop up a Username/Password input window. Once the user has filled in a username and a password, the URL containing the PHP script will be called again with the predefined variables ...
For HTTP Authentication to work with IIS, the PHP directive cgi.rfc2616_headers must be set to 0 (the default value). Now PHP should automatically declare $_SERVER [PHP_AUTH_*] variables if the client sends the Authorization header. This is the simplest form I found to do a Basic authorization with retries. // If arrives here, is a valid user.
It is possible to use the header () function to send an "Authentication Required" message to the client browser causing it to pop up a Username/Password input window.
1. In your php.ini file, set "cgi.rfc2616_headers = 0" 2. In Web Site Properties -> File/Directory Security -> Anonymous Access dialog box, check the "Anonymous access" checkbox and uncheck any other checkboxes (i.e. uncheck "Basic authentication," "Integrated Windows authentication," and "Digest" if it's enabled.)
Try replacing the block to use mod_setenvif to check the request URI instead of using <Files>
. The mod_auth* modules has precedence over mod_dir so the mapping from /
to /index.php
doesn't happen until after the auth takes place. Mod_setenvif will occur before the auth. Try:
SetEnvIf Request_URI "^/$" allow=yes
SetEnvIf Request_URI "^/index.php$" allow=yes
AuthType Basic
AuthName "Password Required"
AuthUserFile /var/www/webinterface/.htpasswd
Options +FollowSymLinks
Order Deny,Allow
Satisfy any
Deny from All
Require valid-user
Allow from env=allow
If the requested URI is exactly /
or /index.php
, the variable allow
gets set. The stuff after the Auth lines say to deny everything except a valid user or if the variable allow
has been set.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With