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

46

Dans presque toutes les solutions de "Comment activer htaccess", ils disent que le fichier / etc / apache2 / sites-available / default doit être édité. Mais ce fichier n'existe pas 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 cette <Directory>section. 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?

CluelessNoob
la source
regarde ça. Cela pourrait vous aider. stackoverflow.com/questions/33062142/…
Avnish alok

Réponses:

58

tl; dr

Oui c'est la bonne façon.
Mais pour être plus sémantique : oui, c’est la bonne façon de permettre .htaccessde surcharger toutes les directives du /var/wwwrépertoire.


Comme vous l'avez découvert, AllowOverrideest autorisé uniquement dans cette Directorysection.

En utilisant votre exemple:

<Directory "/var/www">
    AllowOverride All
</Directory>

Cela indique à Apache que toutes les configurations peuvent être remplacées dans le /var/wwwsous-répertoire et dans 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 créer un .htaccessdans chaque sous-répertoire du /var/wwwrépertoire.
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 .htaccessfichiers du /var/wwwdossier et de ses sous-répertoires, à l'exception du /var/www/uploadsrépertoire et de ses sous-répertoires, peuvent remplacer tous les types de directives.

Mais /var/www/uploadset ses sous-répertoires ne peuvent utiliser le .htaccessfichier que pour remplacer les directives Allow, Denyet Order.

Remarque: À partir d'apache 2.4 (disponible par défaut dans 13.10+) Allow, les directives , Denyet Orderont été remplacées par une seule directive nommée Require.

Dan
la source
39

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 sites-availabledossier:

/etc/apache2/sites-available

Modifier le fichier nommé defaultet le changement AllowOverride noneà AllowOverride All. Il y a deux lignes où ce changement doit être fait.

Cela fera .htaccessfonctionner votre serveur VPS.

Cela a fonctionné sur un Ubuntu 12.04.5 VPS.

q8fft
la source
3
il n'y a pas de fichier nommé default - mais il existe un fichier nommé 000-default.conf
Tahir Yasin
1
+1 pour rappeler d'activer la réécriture, il me manquait cela et je ne pouvais pas comprendre pourquoi cela ne fonctionnait pas après avoir fait tout ce travail.
Abdul Mannan
Ce commentaire fait référence à la configuration d'Apache 2.2, pas 2.4. En 2.4, le defaultfichier est appelé 000-default.confet il ne contient pas la AllowOverride Noneligne.
ben_nuttall
le fichier est 000-default.confet il n'est pas possible d'ajouter AllowOverride Noneici, si vous rechargez apache donne une erreur
Kreker
Si tout ce dont vous avez besoin est de permettre aux directives mod_rewrite d'être écrasées .htaccess, il est préférable de les utiliser AllowOverride FileInfo. Bien que FileInfo inclue déjà un grand nombre de directives, vous empêchez toujours que de nombreuses directives soient remplacées.
Dan
3

Dans mon cas, cela a fonctionné comme ceci:
j'ai dû ajouter les lignes suivantes:

Order allow, deny
Allow from all

Donc ça ressemble à ça:

<Directory /var/www/>
    Options Indexes FollowSymLinks
    AllowOverride All
    Order allow,deny
    allow from all
</Directory>
Prof. Chagas
la source
Bien que cela ait pu résoudre votre problème, cela n’est pas lié à la question posée par le PO. Les directives order et allow sont des directives dans apache2.2 et les versions antérieures. Ils sont utilisés pour autoriser / refuser l'accès aux utilisateurs sur certains annuaires. Ils n'ont aucune incidence sur le fait que les directives d'un fichier .htaccess soient ou non analysées.
Dan
2

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
panticz.de
la source