Quand les htaccess ne marchent pas, le cadenas est ouvert.

Activer les fichiers .htaccess sur Raspbian

Mis à jour le 19 mai 2016 - 8 Commentaires - , , , , ,

Dans cet article nous allons parler de configuration serveur, et plus particulièrement des fichiers .htaccess qui ne fonctionnent pas. Il faut donc que vous ayez installé un serveur Apache sur votre Raspbian.

Mais d’abord, définissons ce qu’est un fichier .htaccess.

Les .htaccess c’est quoi ?

Les « .htaccess », c’est des fichiers. Plus précisément, c’est des fichiers de configuration, à destination du serveur Apache.

Ces fichiers servent à de nombreuses choses, on peut citer entre autres la mise en place de redirections, la réécriture d’URL, ou la limitation d’accès à un répertoire (par exemple avec un mot de passe).

La particularité des fichiers htaccess, c’est qu’ils se placent dans les répertoires ciblés (et s’appliquent aux répertoires contenus par ceux-ci). Ils permettent donc de gérer facilement des sites, sans avoir la possibilité d’accéder à la configuration centrale d’Apache. Ils sont donc utilisés dans de très nombreux projets, et sont sans doute le meilleur moyen de gérer facilement la réécriture d’URL, ou les redirections, et d’exporter ces réglages vers d’autres machines, sans avoir besoin de configurer celles-ci.

Ça fonctionne comment ?

Les fichiers htaccess sont analysés lorsqu’un utilisateur envoie une requête au serveur. Lors de la requête, et afin de savoir comment y répondre, le serveur possède dès le départ une configuration générale, celle qui s’applique à tous les sites. Puis, il va consulter la configuration spécifique du site, celle qui ne s’applique qu’au site cible. Enfin, il va analyser chaque dossier depuis la racine des sites, jusqu’à celui du dossier contenant la ressource demandée par la requête, afin de voir si un fichier « .htaccess » est présent, et le cas échéant appliquer le comportement adapté, à son contenu au dossier, et à ses enfants.

Pour chaque étape, si une configuration déjà renseignée lors de l’étape précédente est trouvée, elle viendra écraser la configuration appliquée jusqu’alors.

On pourrait résumer ce comportement en disant que pour les configurations, les cas les plus particuliers prévalent sur les cas plus généraux.

Ce système signifie donc que la présence de fichier .htaccess va forcément ralentir (bien qu’en pratique cela ne se voit que très peu) le serveur Apache. Préférez donc aussi souvent que possible l’utilisation de la configuration principale, ou de la configuration dédiée au site, à la configuration par htaccess.

Un point important des fichiers .htaccess, c’est qu’ils bloquent les requêtes des utilisateurs, mais pas du serveur lui-même. Il est donc possible d’inclure en PHP un fichier dans un dossier protégé par .htaccess. Cela permet par exemple de stocker des fichiers de configuration, ou des fichiers servant de bases de données.

Pour que vous compreniez bien, voici un petit schéma résumant le fonctionnement d’apache et des fichiers « .htaccess ».

Schéma de fonctionnement des .htaccess

Le fonctionnement des .htaccess et de la configuration Apache. En noir les actions toujours effectuée, en vert celle effectuées si le test est positif, en rouge si il est négatif.

Vous devriez maintenant avoir tout compris ! Les fichiers .htaccess n’ont plus de secret pour vous, et vous saurez toujours quelle configuration a la priorité !

Nous allons donc pouvoir passer au cœur du tutoriel, à savoir comment activer les fichiers .htaccess.

Pourquoi mes .htaccess ne marchent pas ?

C’est un problème que nous avons déjà rencontré dans l’équipe de rédaction (comme toujours avec nos tutoriels). Nous prenons une Raspberry, nous installons un serveur web dessus, nous créons un dossier pour y stocker des sauvegardes de bases de données, ou des fichiers de configurations sensibles, nous en restreignons l’accès via un .htaccess, et… Ça marche pas. Le serveur ne nous empêche pas d’accéder au contenu du dossier.

Alors pourquoi ça ? Pourquoi ce maudit serveur continue de nous fournir les données sur un plateau d’argent ? Il y a trois possibilités qui peuvent expliquer cette situation :

  1. Le fichier .htaccess n’est pas au bon endroit.
  2. Le fichier .htaccess est mal écrit.
  3. Les fichiers .htaccess ne marchent pas, ils ne sont pas activés dans Apache.

Vérifier la cause du problème des .htaccess, et les activer.

Maintenant que nous connaissons les différentes causes d’erreurs possibles, nous allons voir comment trouver laquelle empêche vos .htaccess de fonctionner.

Mauvais emplacement

Dans le premier cas, à vous de vérifier si le fichier .htaccess est bien dans le répertoire adapté, par exemple via la commande suivante :

ls -a chemin_repertoire | grep .htaccess

L’argument -a permet d’afficher tous les fichiers, même les fichiers cachés (sous Unix, les fichiers commençant par un point, comme « .htaccess » sont cachés). Et la commande grep permet de récupérer uniquement la ligne concernant le fichier .htaccess. Vous devriez donc obtenir comme retour « .htaccess ». Si vous obtenez un retour vide, cela signifie que le fichier .htaccess n’est pas présent. À vous alors de le créer et de le remplir comme il se doit.

Htaccess mal écrit

Maintenant que nous avons vu que le problème ne provient pas du fait que le fichier soit mal placé, nous allons vérifier s’il ne s’agit pas d’un simple problème de fichier .htaccess mal fait. Pour cela, nous allons créer à la racine du serveur web (le dossier contenant tous les sites, a priori le répertoire « /var/www ») un fichier .htaccess interdisant tous les accès, pour tous les utilisateurs.

Pour cela, utilisez la commande :

echo 'deny from all' > /var/www/html/.htaccess

Tentez maintenant d’accéder à l’adresse de votre site. Vous devriez obtenir une erreur 403, « You don’t have permission to access / on this server. ».

Screenshot d'une erreur 403 par Apache.

Une jolie erreur 403 d’Apache.

Si c’est le cas, cela signifie que vous aviez simplement mal écrit votre fichier .htaccess. Là encore, à vous de trouver comment écrire correctement un fichier .htaccess, de la documentation sur le sujet existe.

Si ce n’est pas le cas, cela signifie que la configuration par htaccess n’est pas activée dans Apache. Il va donc falloir activer les .htaccess dans Apache, et ça se passe dans la configuration.

Htaccess pas activé

S’il ne s’agit ni d’un mauvais emplacement, ni d’un htaccess mal écrit, alors c’est forcément que vos fichiers .htaccess ne sont pas activés. C’est le cas par défaut lors de l’installation d’Apache sur Raspbian.

Pourquoi Raspbian n’active pas les .htaccess par défaut ?

La question est tout de même légitime. Pourquoi, alors que tout le monde les utilise, Raspbian n’active pas automatiquement les fichiers .htaccess ?

La réponse à déjà été évoquée plus haut, c’est pour des raisons de performances.

Lors de la partie sur le fonctionnement des .htaccess, nous avons dit que le fait de mettre un .htaccess réduit les performances du serveur, ce dernier devant le lire, interpréter les modifications à apporter, et les mettre en place.

Cependant, même si l’on ne met pas de fichiers htaccess en place, cela réduit quand même les performances du serveur. En effet, nous l’avons également expliqué, le serveur va systématiquement chercher si un fichier « .htaccess » existe, et ce pour chaque répertoire jusqu’à celui (inclus) de la ressource demandée. Par conséquent, des ressources seront utilisées à chaque fois, afin de vérifier la présence ou non de ces fichiers, alors qu’il n’en existe aucun. Il s’agit donc de ressources dépensées absolument pour rien.

Pour éviter cela, la seule solution est de désactiver le support des htaccess dans Apache.

Par conséquent, certaines distributions, dont Debian, et par conséquent Raspbian, ont choisi de désactiver par défaut le support des .htaccess dans les options d’Apache, et ce dans l’optique d’optimiser la vitesse du système, laissant le soin aux utilisateurs d’activer les .htaccess dans Apache uniquement s‘ils en ont l’utilité.

Il s’agit finalement d’un vraie bonne idée.

Activer le support des htaccess dans Apache

Pour cette partie nous allons réutiliser le fichier .htaccess créé lors de la vérification de l’écriture du .htaccess. En conséquence, si ce n’est pas encore fait, créez-le.

Jusqu’à présent, même avec le .htaccess refusant toutes les connexions et placé dans le répertoire racine de vos sites web, lors d’une requête votre serveur vous retourne toujours les ressources sans broncher.

Nous allons donc modifier les configurations d’Apache2, et activer les htaccess. Pour cela, éditez le fichier de configuration par défaut des sites d’Apache avec votre éditeur favori, pour nous ce sera « nano » (il vous faudra les droits root, soit via l’utilisation du compte root, soit via la commande sudo) :

nano /etc/apache2/apache2.conf

Puis, cherchez les lignes :

AllowOverride None

Et remplacez-les par

AllowOverride All

Enfin, enregistrez les modifications.

Astuces :

  • Avec nano vous pouvez faire une recherche via le raccourci clavier Ctrl + w
  • Avec vi (ou équivalent), vous pouvez directement remplacer les lignes en tapant « :%s/AllowOverride None/AllowOverride All/g »

Si vous avez créé d’autres fichiers de configuration pour certains sites, dans lesquelles sont renseignés « AllowOverride », assurez-vous de bien les mettre à la bonne valeur eux aussi.

Pour que les modifications soient prises en compte, vous devez redémarrer le serveur Apache :

/etc/init.d/apache2 restart

Les fichiers htaccess devraient maintenant être opérationnels.

Vérifiez-le en tentant d’accéder à votre site. Si vous avez créé le fichier .htaccess de la partie « htaccess mal écrit », vous devriez alors obtenir une erreur 403. Il ne vous reste plus qu’à supprimer le fichier « .htaccess » de test, via la commande :

rm /var/www/html/.htaccess

Voilà, vos fichiers .htaccess sont maintenant activés, et vous pouvez de nouveau utiliser vos redirections et autres restrictions d’accès.

Vous n’avez plus qu’à vous prendre un disque dur externe, et vous pourrez stocker tous vos films sur votre serveur, et protéger le répertoire avec un mot de passe, et ainsi accéder à vos films depuis n’importe où !

Sinon, vous pouvez toujours vous amuser à créer d’autres choses avec votre Raspberry Pi, comme un media-center pourquoi pas, ou encore une console pour le rétro-gaming !

Partager
Newsletter
Auteur :
Raspbian France
Rejoignez la communauté Raspberry Pi
Un ordinateur à 35€ déjà vendu à 10 millions d'exemplaires
ACHETEZ LA NOUVELLE RASPBERRY PI 3
Tutoriels en rapport
Installer un media-center avec OSMC sur votre Raspberry Pi ! RaspiSMS 2.0, envoyer des SMS par internet avec la Raspberry Pi Bien choisir vos accessoires pour les Raspberry Pi 3 et 2 Envoyer, gérer et recevoir des SMS avec la Raspberry Pi Installer un serveur web sur votre Raspberry (Apache + PHP + MySQL)
8 commentaires
Besoin d'aide ? Vous la trouverez plus vite sur notre forum.

  1. harun dit :

    comment activer le rewrite module ???

    parce j’ai toujours une erreur quand je met mes fichiers htaccess,

    alors que sur mamp ça marche (en local)

    c’est que il faut modifier une configuration dans l’apache du raspberry ?

    l’erreur c’est le 500 internal error

    1. Salut,
      ouais c’est une config à faire dans l’Apache du Raspberry Pi.
      Il faut que tu lances la commande « a2enmod rewrite » pour activer la ré-écriture d’URL.

  2. Kylernet dit :

    Bonjour,

    superbes tutos merci encore, ils sont très utiles.
    Par contre pour les .htaccess ce n’est pas dans /etc/apache2/sites-enabled/000-default
    car je n’ai aucune lignes où il y a AllowOverride
    mais dans le fichier de conf apache2 ou il faut changer AllowOverride All.

    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted

    J’espère ne pas dire de bêtises.

    Merci encore!

  3. klode dit :

    bonjour,

    j’ai aussi ce problème de .htaccess donc je regarde dans apache2.conf et j’ai ces lignes :

    AccessFileName .htaccess

    Order allow,deny
    Deny from all
    Satify all

    que dois-je modifié ?

    merci

    1. Salut,
      c’est les seules lignes du fichier ?

  4. ExtraDev dit :

    Bonjour j’ai réalisé un site réalisé avec un fichier .htaccess pour de la réécriture d’URL.
    Dans celui-ci:

    #follow symbolics links
    Options +FollowSymlinks

    #Enable rewrite module
    RewriteEngine All

    #Action without id
    RewriteRule ^([a-zA-Z]+).html index.php?action=$1 [L]

    #Action with id
    RewriteRule ^([a-zA-Z]+)-([0-9]+).html index.php?action=$1&id=$2 [L]

    Même avec votre tutoriel, cela ne fonctionnait pas. Je suis allez voir dans les fichier d’erreurs et j’ai constaté que « RewriteEngine » devait être en « On » ou « Off » et non en « All » ou « None ». Si jamais des personnes ont des erreurs 500 de vous recommande de vérifier cela.

    Encore petit conseil, si votre site ne fonctionne pas, ne pas hésiter à aller voir dans:
    /var/log/apache2/error.log
    C’est là que j’ai pu comprendre l’origine de mon erreur.

    1. Bonjour,
      merci de partager ton expérience !
      le log c’est la vie 😉

Partager
Inscription à la Newsletter
Inscrivez-vous à la Newsletter.
Vous avez aimé cet article ?
Inscrivez-vous et restez informé !