Configuración distribuída
A configuración distribuída, ao contrario da configuración global, é aquela que ten un ámbito local. Con ámbito local entendemos que só afecta a un servidor virtual ou, incluso, a unha parte dun servidor virtual. Aínda que é menos habitual, tamén pode afectar a varios servidores virtuais. Para este tipo de configuración empréganse os ficheiros de configuración distribuída.
Os ficheiros de configuración distrubuída utilízanse coa finalidade de que teñan efecto só no directorio no cal están situados e, por extensión, aos subdirectorios.
Un ficheiro de configuración distribuída en Apache Server debe levar o nome .htaccess.
Nome dos ficheiros configuración distribuída
O nome dos ficheiros de configuración distribuída (.htaccess) defínese no ficheiro de configuración global /etc/apache2/apache2.conf na seguinte liña:
AccessFileName .htaccess
Ademais, no mesmo ficheiro de configuración global apache2.conf hai unhas liñas como as seguintes:
<FilesMatch "^\.ht">
Require all denied
</FilesMatch>
Estas liñas serven para denegar o acceso de todos os usuarios aos ficheiros que teñan un nome que comece por .ht, sendo .htaccess un deles. Isto é importante porque neles pode haber información de configuración que pode comprometer a seguridade do servidor e non queremos que calquera usuario a poida ver.
O nome dos ficheiros de configuración distribuída pode ser modificado se cambiamos o valor da directiva AccessFileName, aínda que é moi raro atopar un caso no que isto sexa necesario.
Habilitar o uso de .htaccess
Por defecto, o uso dos ficheiros .htaccess están deshabilitados. A directiva AllowOveride será a que indique se se deben ter en conta ou non os ficheiros de configuración distribuída.
Os valores de AllowOverride poden ser:
None: os ficheiros de configuración distribuída non se terán en conta.All: os ficheiros de configuración distribuída teranse en conta e, ademais, terán prioridade sobre as configuracións establecidas noutros ficheiros como os dos servidores virtuais ou no ficheiro de configuración global.
Para poder empregar os ficheiros .htaccess, debemos editar a liña da directiva AllowOverride que está dentro do contenedor <Directory /var/www/></Directory> do ficheiro /etc/apache2/apache2.conf. En lugar do valor None temos que empregar All. Quedaría da seguinte maneira:
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
Debemos reiniciar o servidor para aplicar os cambios:
$ sudo systemctl restart apache2
Crear un ficheiro .htaccess
Podemos crear tantos ficheiro .htaccess como queiramos, aínda que debemos intentar reducir o seu uso porque supoñen unha carga extra para o servidor web.
A difereza do resto de configuracións que se realicen en Apache, cando creamos ou modificamos un ficheiro .htaccess, as modificación son inmediatas. Para aplicar os cambios realizados nun ficheiro .htaccess non é necesario reiniciar o servidor para aplicar os cambios. É por isto que se debe intentar reducir o seu uso ao máximo posible.
Por outro lado, cando aplicamos unha configuración no .htaccess que entra en conflicto con unha que se definíu noutro ficheiro de configuración de Apache como o ficheiro de configuración global, ten prioridade a configuración realizada no .htaccess, é dicir, o ficheiro .htaccess sobreescribe a configuración do outro ficheiro.
Por exemplo, supoñamos o seguinte contido dentro de /var/www/:
/var/www/
├── hosting
└── html
└── index.html
Para crear un ficheiro dentro de /var/www/ executamos:
$ sudo touch /var/www/.htaccess
Agora, o contido do directorio /var/www/ sería o seguinte:
/var/www/
├── .htaccess
├── hosting
└── html
└── index.html
Para comprobar que o ficheiro está ben creado, executamos o seguinte comando:
$ ls -a /var/www
Saída do comando
$ ls -a /var/www
. .. hosting .htaccess html
En Ubuntu e Debian, todos os nomes de ficheiros que comezan cun punto son tratados como ficheiros ocultos, polo que se utilizamos o comando ls para comprobar se hai un ficheiro .htaccess nun directorio, non aparecerá na lista. Para poder mostralo, temos que empregar a opción -a.
Dito isto, o comando que temos que executar para ver se hai un ficheiro .htaccess no directorio actual é o seguinte:
$ ls -a
Por outro lado, o comando que temos que executar para ver se hai un ficheiro .htaccess nun directorio que non é o actual (como, por exemplo, /var/www) é o seguinte:
$ ls -a /var/www
O ficheiro .htaccess está creado correctamente e a súa configuración aplicarase:
- Ao directorio
/var/www/. - Ao directorio
/var/www/hosting. - Ao directorio
/var/www/htmle o seu ficheiroindex.html.