I have a .htaccess that uses basic authentication. It seems the path to the .htpasswd file isn't relative to the htaccess file, but instead to the server config.
So even though I have the .htaccess and .htpasswd files in the same directory, this doesn't work:
AuthType Basic AuthName "Private Login" AuthUserFile .htpasswd Require valid-user
However, it does work if I change the AuthUserFile to use the absolute path:
AuthType Basic AuthName "Private Login" AuthUserFile "/home/user/public_html/mydir/.htpasswd" Require valid-user
But I would prefer something more mobile as I use this on multiple sites in different areas. I've searched the web but haven't had any resolution. Is it possible to use relative path or variables like %{DOCUMENT_ROOT}
?
php echo dirname(__FILE__) . '/. htpasswd'; ?> Then access it via your browser and it should display the full path you'll need to put in your .
It is not possible to use relative paths for AuthUserFile:
File-path is the path to the user file. If it is not absolute (i.e., if it doesn't begin with a slash), it is treated as relative to the
ServerRoot
.
You have to accept and work around that limitation.
We're using IfDefine
together with an apache2 command line parameter:
.htaccess
(suitable for both development and live systems):<IfDefine !development> AuthType Basic AuthName "Say the secret word" AuthUserFile /var/www/hostname/.htpasswd Require valid-user </IfDefine>
Append the following to /etc/apache2/envvars
:
export APACHE_ARGUMENTS=-Ddevelopment
Restart your apache afterwards and you'll get a password prompt only when you're not on the development server.
You can of course add another IfDefine for the development server, just copy the block and remove the !
.
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