Fichier htaccess

Qu'est-ce qu'un fichier htaccess ?

“.htaccess” est un simple fichier texte composé de commandes, déposé sur votre site. Il permet de personnaliser le serveur web Apache dynamiquement, et par répertoire.

Les valeurs de configurations sont héritées à travers les répertoires. Les applications courantes du réglage d'un fichier htaccess sont le basculement entre PHP4 et PHP5, la protection d'une partie du site, la redirection d'un site web vers un autre ou la personnalisation des messages d'erreur. Une fois sur le serveur, son nom doit être .htaccess, avec un point devant.

Ce fichier est a créer avec soin car en cas de maladresse il provoquera une Erreur 500 sur le serveur et bloquera l'accès à vos pages web. Dans ce cas, vérifier la syntaxe et vérifier que vous l'avez bien transféré par FTP en mode texte et non en mode binaire.

Vous devez créer ou éditer sous Windows le fichier .htaccess avec notepad (ne pas utiliser wordpad).
Quand vous transférez votre fichier .htaccess, vérifiez que le mode de transfert FTP est "TEXTE" et non pas "BINAIRE", sinon vous aurez une erreur http 500.

Votre fichier .htaccess doit finir avec une ligne vide, dans le cas contraire cela générera une erreur 500

Pages d'erreurs personnalisées

Cette fonctionnalité vous permet de remplacer (entre autres) le message de type 404 (Not found) par un texte plus amical ou par une redirection sur une autre URL (locale ou externe).

On utilise pour cela la commande ErrorDocument dont voici quelques exemples d'utilisation :

ErrorDocument 404 /monfichier404.html
ErrorDocument 404 http://www.mondomaine.ext
ErrorDocument 403 /accesrefuse.html

Cette commande doit se trouver dans un fichier .htaccess dans le répertoire dont vous souhaiter rediriger les messages d'erreurs.

(typiquement la racine de votre site web mais pas obligatoirement)

Empêcher le listing d'un répertoire

Voici comment empêcher l'affichage de la page d'index qui liste les fichiers d'un répertoire.

  • Étape 1: Créer un fichier htaccess

Prenez votre éditeur de texte favori (Bloc Notes, Vim, Emacs, whatever), et créer un fichier texte avec le contenu suivant:

Options -Indexes
ATTENTION : IndexOptions -Indexes ne fonctionne pas sur l'hébergement web (c'est obsolète), il faut utiliser la directive standard Options -Indexes
  • Étape 2: Mettre le fichier en ligne

Mettez le fichier créer précédemment en ligne via FTP, placer le dans le répertoire de votre choix, et renommer le en “.htaccess” .

Il ne vous reste plus qu'a tester.

Empêcher l'accès à un répertoire

Voici comment restreindre l'accès à une liste d'adresse IP's.

  • étape 1 : Créer un fichier htaccess

Prenez votre éditeur de texte favori (Bloc Notes, Vim, Emacs, whatever), et créer un fichier texte avec le contenu suivant:

# On autorise l'accès à l'ip 213.228.62.50
Allow from 213.228.62.50
# On autorise l'accès à l'ip 213.228.62.51
Allow from 213.228.62.51
# On interdit l'accès à toutes les autres ips
Deny from All
  • étape 2 : Mettre le fichier en ligne

Mettez le fichier créer précédemment en ligne via FTP, placer le dans le répertoire de votre choix, et renommer le en “.htaccess” ( sans les guillemets ).

Il ne vous reste plus qu'a tester.

Sécuriser un répertoire avec une authentification

Voici comment sécuriser l'accès à un répertoire (ou tout le site), par une authentification HTTP.

Supposons que vous souhaitez protéger le répertoire appelé secret, accessible via l'URL suivante :

http://www.online.net/secret/
  • Étape 1: Création d'une table d'utilisateurs

Il s'agit de créer un fichier contenant la liste des utilisateurs et leurs mot de passe, nous appellerons ce fichier “passlist.txt”.

martin:$apr1$tQqqRlvz$70soamNFTNl54OnSV.RWr.
jean:$apr1$yMWZ093W$DKAVAi5.XRx1ofwF5T..E0
sophie:$apr1$92x5vRxN$vivxTZtZfcqRmRBvL1ASF/

Le premier champ est le nom de l'utilisateur, le second est le mot de passe encrypté.

Les mots de passes en clair ne sont pas autorisés.

Au besoin, vous pouvez utiliser ce site pour encrypter vos mots de passes : http://www.htaccesstools.com/htpasswd-generator/

  • Étape 2: Création du fichier htaccess

Pour limiter l'accès aux utilisateurs déclarés dans le fichier “passlist.txt”, il vous faut créer un fichier htaccess dans le répertoire que vous souhaitez protéger avec le contenu suivant :

AuthUserFile /CHEMIN/passlist.txt
AuthName "Acces Restreint"
AuthType Basic
require valid-user

Le “CHEMIN” sera à remplacer par :

  • Pour les hébergements WEB : /flex/domain/DOMAIN.TLD/site/www/
  • Pour les hébergements CLOUD : /var/www/DOMAIN.TLD/www
Il vous faudra remplacer DOMAIN.TLD par le nom de domaine utilisé.

La commande AuthUserFile désigne le chemin d'accès à la table des utilisateurs. Ce chemin est relatif au “/” de votre hébergement, c'est a dire qu'il faut que ce chemin commence généralement par au moins “www/” ou “blog/”.

Donc si vous avez stocké votre table d'utilisateurs dans le répertoire /www/secret/password/ sous le nom 'maliste.txt', vous devrez modifier la directive AuthUserFile en conséquence :

AuthUserFile /flex/domain/DOMAIN.TLD/site/www/secret/password/maliste.txt

La commande require valid-user autorise tous les utilisateurs valides à télécharger les fichiers du répertoire. Vous pouvez aussi utiliser la syntaxe suivante :

require user martin sophie

Pour n'autoriser uniquement que les utilisateurs Martin et Sophie, mais pas Jean.

  • Étape 3: Mettre les fichiers en ligne

Mettez le fichier créer précédemment (htaccess) en ligne via FTP, placez-le dans le répertoire de votre choix, et renommez-le en “.htaccess” .

Il ne vous reste plus qu'a tester.

Pour ceux qui veulent aller plus loin, le guide utilisateur d'Apache qui traite en détail tout les aspects d'authentification.

Remarques

  • Sous plate-forme Microsoft Windows, il n'est pas possible de créer directement sur votre ordinateur un fichier portant le nom “.htaccess”. Vous devez le créer avec un autre nom, par exemple “htaccess.txt” , le transférer sur le serveur, puis le renommer.
  • Vous devez transférer ce fichier en mode ASCII (voir documentation de votre client FTP) pour assurer la conversion des caractères 'fin de ligne'.
  • Il est fortement conseillé de protéger sa liste de mots de passes, vous pouvez par exemple la stocker dans un sous-répertoire de votre site Web que vous protégerez en créant un fichier .htaccess .

Redirections HTTP

Vous avez la possibilité de mettre des redirections vers une autre partie de votre site, ou vers un autre site .

Pour rediriger votre site vers un autre (vers http://www.online.net par exemple)

  • Étape 1: Créer un fichier .htaccess avec le contenu suivant
# Redirection vers le site d'Online.net
RedirectPermanent / http://www.online.net/
  • Etape 2: Mettre le fichier en ligne

Mettez le fichier en ligne via FTP à la racine du sous domaine concerné (répertoire www pour www.domaine.ext, blog/ pour blog.domain.cometc ) et renommer le en “.htaccess”.

La documentation complète sur le site d'Apache.

Redirection HTML

Vous avez la possibilité de mettre des redirections vers une autre partie de votre site, ou vers un autre site directement via un fichier html.

Cette méthode, plus simple mais bien moins propre et efficace, utilise les documents HTML eux-mêmes, pour indiquer leur déplacement.

Cette méthode ne devrait être utilisée que lorsque les redirections HTTP sont impossibles.

Exemple de redirection de http://ancienne.adresse.fr/dossier1/page1.html vers http://nouvelle.adresse.fr/dossier2/page2.html

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<meta http-equiv="refresh" content="0; url=http://nouvelle.adresse.fr/dossier2/page2.html" />
<title>Redirection</title>
<meta name="robots" content="noindex,follow" />
</head>
<body>
<p><a href="http://nouvelle.adresse.fr/dossier2/page2.html">Redirection</a></p>
</body>
</html>

Redirection PHP

Vous avez la possibilité de mettre des redirections vers une autre partie de votre site, ou vers un autre site directement via un fichier PHP. Créez un fichier index.php contenant le code suivant, a l'appel de la page http://domaine.ext/index.php vous serez redirigé vers http://nouveausite.com/.

<?php
header("Location: http://nouveausite.com/");
?>
Par défaut la redirection renvoi le code HTTP 301. N'oubliez pas de le modifier au besoin.

Rewrite Rules

Le module apache mod_rewrite est activé sur nos serveurs d'online, son fonctionnement via un fichier htaccess est standard.

La directive FollowSymlinks est activé et ne peut être modifiée, il ne faut donc pas la déclarer, sinon vous aurez une error http 500 .

Prenons un exemple, le nom de domaine est domaine.ext, l'url du script qui doit être appeler est httpwww.domaine.ext/index.php avec le nom de page en argument.
* Étape 1: Créer un fichier htaccess
RewriteEngine On
RewriteRule ^([^\.]+)\.html /index.php?page=$1 [L]
* Étape 2: Mettre le fichier en ligne
Mettez le fichier en ligne via FTP à la racine du sous domaine concerné (répertoire www pour www.domaine.ext, blog/ pour blog.domaine.ext etc ) et renommer le en “.htaccess”.
* Étape 3: Tester
Vous pouvez maintenant tester en appelant l'url http://www.domaine.ext/test.html, index.php sera exécute et recevra en argument la variable page qui a pour valeur “test”.