O Apache ignora meu arquivo .htaccess
. Eu li mais ou menos todos os tópicos sobre este problema que eu poderia encontrar e tentei todas as soluções e nada funciona. Eu tentei mais de uma vez.
A configuração
- Ubuntu 16.04.1 LTS (GNU / Linux 4.4.0-57-genérico x86_64) no VPS
- Apache / 2.4.18 (Ubuntu)
- Django 1.10 via WSGI
- Python 3.5 no virtualenv
Desejo exibir alguns arquivos que devem estar disponíveis somente por meio de intervalos de IP aprovados ou login de usuário. Eu tenho um arquivo .htaccess
que eu usei anteriormente em um webhost com um site baseado em php, e agora eu quero que ele funcione em um VPS com um site baseado em Django.
Os nomes dos diretórios abaixo foram alterados, mas eles devem ser fiéis à configuração.
Localização dos arquivos
.htaccess
arquivo dentro de /dir
em um subdiretório, /dir/1/2/3
.
Eu quero aplicar configurações a todos os subdiretórios desse subdiretório, por exemplo, /dir/1/2/3/a
, /dir/1/2/3/b
, /dir/1/2/3/c
. Esses diretórios têm arquivos que devem ser protegidos (por exemplo, /dir/1/2/3/a/file.pdf
). Isso deve ser feito via .htaccess
, não configurações do servidor porque a lista de IPs aceitáveis é muito longa e eu prefiro não inchar meus arquivos de configuração do apache .
.htaccess
file
A maior parte do conteúdo é redigida por motivos de privacidade, mas segue este modelo.
# 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"
O arquivo passwd
tem as permissões necessárias também.
Configuração do Apache
Arquivo de configuração padrão: /etc/apache2/sites-available/000-default.conf
Tem várias outras configurações que funcionam bem, por ex. relacionado ao WSGI. Adicionar um disparate para testar isso resulta em erro de apache conforme o esperado.
Diretiva para ativar .htaccess
:
<Directory /dir>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
</Directory>
Também tentei:
<Directory /dir>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
Allow from all
</Directory>
Tentei várias outras variações. Nenhum deles faz diferença. Eu reinicio entre as alterações.
Eu verifiquei que este diretório está escrito corretamente.
sites-enabled
vs. sites-available
Em algum lugar, eu li que é preciso editar o arquivo sites-enabled
config, não o sites-available
one. Estes são os mesmos arquivos, o enabled
one apenas vincula ao sites-available
one.
a2enmod
está ativado:
user@server:dir$ sudo a2enmod rewrite
Module rewrite already enabled
Permissões
chown
é o usuário do servidor: www-data
.
chmod
. Eu tentei várias configurações: a + x, u + x, 777, muitas outras, mais de uma vez.
As permissões são as seguintes:
-rwxrwxrwx 1 www-data www-data 11135 Apr 5 14:47 .htaccess
DocumentRoot
De acordo com essa resposta aceita , o arquivo .htaccess
deve ser no DocumentRoot
ou um subdir desse. Eu mudei o DocumentRoot
para apontar para /dir
. Sem efeito.
Configurações principais do apache: /etc/apache2/apache2.conf
Em vez de editar a configuração do virtualhosts, pode-se editar o arquivo principal de configurações do apache.
Este arquivo tem mais algumas diretivas Directory
. Uma delas é:
<Directory />
Options FollowSymLinks
AllowOverride None
Require all denied
</Directory>
Eu assumo que qualquer diretiva mais profunda irá sobrescrever uma mais alta, mas eu vi algumas pessoas dizendo que não é assim. Eu tentei definir este como AllowOverride All
também. Sem efeito. Na verdade, tentei configurar todas as diretivas do Diretório para isso, incluindo as irrelevantes (relacionadas a outros diretórios, por exemplo, /var/www
, que não é usado).
AccessFileName .htaccess
Esta configuração não é alterada do padrão e é como deveria.
Registros
Não há erros nem nada de relevância no log de erros ou no log de acesso.
Teste sem sentido
Para determinar se o apache está lendo o arquivo, tentei adicionar um erro de sintaxe deliberado em .htaccess
. Nenhum erro do servidor, portanto, o servidor deve estar ignorando o arquivo completamente.
-
Não consigo encontrar mais nada para tentar.