Apache ignores my `.htaccess` file. I've read more or less every thread about this issue I could find and tried all the solutions and nothing works. I've tried them more than once. # The setup - Ubuntu 16.04.1 LTS (GNU/Linux 4.4.0-57-generic x86_64) on VPS - Apache/2.4.18 (Ubuntu) - Django 1.10 via WSGI - Python 3.5 in virtualenv I want to serve some files that should only be available via approved IP ranges or user login. I have a `.htaccess` file that I've previously used on a webhost with a php-based website, and now I want it to work on a VPS with a Django-based website. The names of the directories below have been changed, but they should be faithful to the setup. ## Location of files `.htaccess` file inside `/dir` in a subdir, `/dir/1/2/3`. I want it to apply settings to every subdir in that subdir, e.g. `/dir/1/2/3/a`, `/dir/1/2/3/b`, `/dir/1/2/3/c`. These dirs have files that should be protected access (e.g. `/dir/1/2/3/a/file.pdf`).This should be done via `.htaccess`, not server-wide settings because the list of acceptable IPs is very long and I rather not have it bloat my apache config files. ## `.htaccess` file Most of the content is redacted for privacy reasons, but it follows this template. # initial deny <Limit GET POST> order deny,allow deny from all # SUBSCRIBER LIST #a very long list that follows this pattern or with CIDR ranges allow from 1.2.3.4 # other settings # users require user someuser satisfy any </Limit> # authtype AuthType Basic AuthName "Available only for subscribers." require valid-user AuthUserFile "/dir/passwd" The `passwd` file has the necessary permissions as well. ## Apache config Default config file: `/etc/apache2/sites-available/000-default.conf` Has a number of other settings that work fine e.g. related to WSGI. Adding nonsense to test this results in apache error as expected. Directive to enable `.htaccess`: <Directory /dir> Options Indexes FollowSymLinks MultiViews AllowOverride All </Directory> Also tried: <Directory /dir> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny Allow from all </Directory> Tried a number of other variations. None of them make any difference. I restart between any changes. I've verified that this directory is spelled correctly. ## `sites-enabled` vs. `sites-available` Someplace I read that one must edit the `sites-enabled` config file, not the `sites-available` one. These are the same files, the `enabled` one just links to the `sites-available` one. ## `a2enmod` Is enabled: user@server:dir$ sudo a2enmod rewrite Module rewrite already enabled ## Permissions `chown` is server's user: `www-data`. `chmod`. I tried a number of settings: a+x, u+x, 777, many others, more than once. Permissions are as of writing: -rwxrwxrwx 1 www-data www-data 11135 Apr 5 14:47 .htaccess ## `DocumentRoot` [According to this accepted answer][1], the `.htaccess` file must be in the `DocumentRoot` or a subdir of that. I changed the `DocumentRoot` to point to `/dir`. No effect. ## Main apache settings: `/etc/apache2/apache2.conf` Instead of editing the virtualhosts config, one can edit the main apache settings file. This file has some more `Directory` directives. One of these is: <Directory /> Options FollowSymLinks AllowOverride None Require all denied </Directory> I assume that any deeper directive will overwrite a higher one, but I saw some people say this isn't so. I tried setting this one to `AllowOverride All` as well. No effect. In fact I tried setting all the Directory directives to that, including the irrelevant ones (relating to other directories e.g. `/var/www` which is not used). ## `AccessFileName .htaccess` This setting is unchanged from default and is as it should. ## Logs There are no errors or anything of relevance in either the error log or the access log. ## Nonsense test To determine whether apache is even reading the file, I tried adding deliberate syntax error into `.htaccess`. No server error, so server must be ignoring the file completely. -- I cannot find anything more to try. [1]: https://stackoverflow.com/questions/25809132/htaccess-being-ignored-ubuntu-14-04