web-dev-qa-db-fra.com

Est-ce une manière correcte d'activer htaccess dans Apache 2.4.7

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?

46
CluelessNoob

tl; dr

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.

57
Dan

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.

37
q8fft

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>
3
Prof. Chagas

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
2
panticz.de