Dans presque toutes les solutions de "Comment activer htaccess", ils disent que le fichier/etc/Apache2/sites-available/default doit être édité. Mais il n'y a pas de tel fichier dans Apache 2.4.7
J'ai lu quelque part que le nouveau fichier par défaut est 000-default.conf. Alors j'ai édité celui-là et essayé d'ajouter la ligne:
AllowOverride All
Mais Apache2 n'a pas redémarré correctement et a généré une erreur. Dans une documentation Apache2, j'ai constaté que AllowOverride n'est autorisé que dans la section <Directory>
. Puis j'ai essayé d'ajouter ceci:
<Directory "/var/www">
AllowOverride All
</Directory>
Et cela semble fonctionner. Mais je ne sais pas si j'aurais dû y mettre/var/www. Est-ce une façon correcte de le faire ou mon ordinateur va-t-il exploser?
Oui c'est la bonne façon.
Mais pour être plus sémantique : Oui, c’est la bonne façon d’autoriser .htaccess
à écraser toutes les directives du répertoire /var/www
.
Comme vous l'avez découvert, AllowOverride
est autorisé uniquement dans la section Directory
.
En utilisant votre exemple:
<Directory "/var/www">
AllowOverride All
</Directory>
Cela indique à Apache que toutes les configurations peuvent être remplacées dans le /var/www
et tous ses sous-répertoires (de manière récursive).
Pour un meilleur exemple, considérons que vous avez la configuration suivante dans votre hôte virtuel:
<Directory "/var/www">
AllowOverride All
</Directory>
<Directory "/var/www/uploads">
AllowOverride Limit
</Directory>
Et la structure de répertoire suivante:
var/
www/
.htaccess
uploads/
.htaccess
a/
.htaccess
b/
.htaccess
code/
.htaccess
c/
.htaccess
d/
.htaccess
Ce que j’ai fait ici, c’est de créer un .htaccess
dans chaque sous-répertoire du répertoire /var/www
.
Cela ne devrait généralement pas être comme ça, mais ceci est juste pour l'exemple
En comparant la structure de répertoires à la configuration, cela signifie que tous les fichiers .htaccess
du dossier /var/www
et de ses sous-répertoires, à l’exclusion du répertoire /var/www/uploads
et de ses sous-répertoires, peuvent remplacer toutes sortes de directives.
Mais /var/www/uploads
et ses sous-répertoires ne peuvent utiliser le fichier .htaccess
que pour remplacer les directives Allow
, Deny
et Order
.
Remarque: à partir d'Apache 2.4 (disponible par défaut dans 13.10+), les directives Allow
, Deny
et Order
ont été remplacées par une seule directive nommée Require
.
Activez d'abord la réécriture à l'aide de cette commande:
Sudo a2enmod rewrite
Puis redémarrez Apache2:
Sudo service Apache2 restart
Ensuite, allez dans le dossier sites-available
:
/etc/Apache2/sites-available
Editez le fichier nommé default
et remplacez AllowOverride none
par AllowOverride All
. Il y a deux lignes où ce changement doit être fait.
Ceci fera fonctionner .htaccess
dans votre VPS de serveur.
Cela a fonctionné sur un Ubuntu 12.04.5 VPS.
Dans mon cas, cela a fonctionné comme ceci:
J'ai dû ajouter les lignes suivantes:
Order allow, deny
Allow from all
Alors ça ressemble à ça:
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
allow from all
</Directory>
Voici un extrait expliquant comment activer htaccess dans Apache 2.4 sans modifier la configuration par défaut:
cat <<EOF> /etc/Apache2/conf-available/allow-override.conf
<Directory "/var/www">
AllowOverride all
</Directory>
EOF
a2enconf allow-override
service Apache2 reload