Notre magasin

Rue Albert 1er, 7

6810 Pin - Chiny

(/fax: 061/32.00.15

16. Mise en ligne d'un site Internet

Formations en ligne YBET
YBET Internet Techniques
Formation création de site Formation Internet PC et périphériques
Formations YBET PHP - MySQL Equipements réseaux
ACCUEIL Forum webmasters Nous contacter

15.5. Le fichier HTACCESS

1 Introduction - 2. Protection d'un dossier par mot de passe - 3. Messages d'erreur personnalisés - 4. Fichier index par défaut - 5. Accepter ou refuser des visiteurs d'un domaine particulier - 6. Interdire l'accès à certains robots ou aspirateurs de sites - 7. Déplacer des fichiers, dossiers ou nom de domaines - 8. URL Rewriting

1. Introduction.

Le fichier .HTACCESS est un fichier de configuration des serveurs APACHE utilisé principalement sur les serveurs LINUX (même si une version fonctionne sur les serveurs Windows). Il peut être inséré dans le dossier principal ou dans un sous-dossier. La configuration appliquée gère le dossier en cours qui héberge le site Internet plus tous les sous-dossiers inclus.

Parmi ses différentes fonctions, on retrouve:

Remarque: l'utilisation de ce fichier n'est pas limité à un langage de programmation mais bien aux droits d'accès et fonctionnalités des fichiers et dossiers hébergés. Si un fichier .htaccess est inséré ans un sous-dossier alors qu'un dossier supérieur contient également ce type de fichier, celui du dossier parent reste en fonction dans le sous-dossier tant que les règles ne sont pas réécrites.

Tous les hébergements n'acceptent pas cette fonctionnalité, déjà les serveurs sous Windows n'utilisent généralement pas Apache (voire IIS sous Windows 2000). Quelques hébergements gratuits le refusent, d'autres permettent des fonctions limitées, voire des syntaxes modifiées. Quelques fonctionnalités comme le mode rewriting sont également refusés dans quelques hébergements mutualisés.

Je vais essayer ici de faire le plus simple possible, même en passant des règles trop spécifiques si nécessaires. C'est une formation, pas un manuel professionnel, mais la majorité des règles essentielles sont ici. Quelques règles qui suivent peuvent normalement être utilisé en local sous EasyPhp, même si ça nécessite parfois de configurer php.ini ou en réel de charger en mémoire le Module mod_auth. Pour enregistrer le fichier sous son vrai nom, dans enregistrer, tapez ".htaccess".

De toute façon, si vous avec une erreur 500 (erreur serveur) ou 404 (page introuvable) avec une règle valide, ça signifie généralement que votre hébergement n'accepte pas ce type de fichier. 

2. Protection d'un dossier par mot de passe.

Cette méthode permet de définir les accès sur un dossier et ses sous-dossiers via un login et un mot de passe (plusieurs utilisateurs peuvent être autorisés si nécessaires).

Utilisation syntaxe simple dans le fichier de protection .htaccess (enlevez les lignes de commentaires //)

AuthUserFile (dossier + nom du fichier contenant le mot de passe)
AuthGroupFile /dev/null
# permet de définir un fichier de groupes d'utilisateurs, /dev/null permet de ne pas l'utiliser.
AuthName "nom domaines"
# ce sont les termes qui sont affichés dans la fenêtre mot de passe comme domaine.
AuthType Basic
# ceci sélectionne le type d'authentification du dossier, Basic ou Digest. il est obligatoire avec la commande
<LIMIT GET POST>
Require valid-user
</LIMIT>

Dans l'exemple ci-dessous, le répertoire protégé est sur le site www.darut.be, la commande envoyée par AuthName est Statistiques. Remarquez que le nom du dossier n'est pas affiché, ni même le nom des utilisateurs autorisés. Les login et mots de passe cryptés sont inscrit dans le fichier défini par AuthUserFile (généralement nommé .htpassword mais ce n'est pas obligatoire), par exemple:

/home/ybet/www/admin/.htpasswd soit suivant la notation Linux et non la notation "Internet".

Il nous reste à définir le contenu de ce fichier .htpassword. Il contient chaque fois le nom d'utilisateur suivi de son mot de passe crypté. Le cryptage se fait à l'aide de la commande PHP crypt(mot_de passe).

Le petit programme en php ci dessous permet de créer ce mot de passe. Le nom d'utilisateur n'intervient pas dans le cryptage.

<p>
<?php
if (isset($_POST['login']) AND isset($_POST['password']))
{
$login = $_POST['login'];
$password_crypte = crypt($_POST['password']);

echo 'Ligne à insérer dans le .htpassword :<br />' . $login . ':' . $password_crypte;
}
else
{
// Pas de login ou mot de passe inséré.
?>
</p>
<p>Entrez votre login et votre mot de passe pour le cryptage.</p>
<form method="post">
<p>
Login : <input type="text" name="login"><br />
Mot de passe : <input type="text" name="password"><br /> <br />
<input type="submit" value="Crypter">
</p>
</form>

<?php
}
?>

Ceci nous donne:

Entrez votre login et votre mot de passe pour le cryptage.

Login :
Mot de passe :

Un fichier plus pratique pour le décoder.

Prenons le cas d'un login ybet et d'un mot de passe ybet, le code à insérer dans le fichier sera ybet:$1$On/L3V0T$OmPIhwRO7k ...

Les autres utilisateurs également autorisés sont rajoutés à la ligne suivante les uns après les autres.

En cas de d'erreur, vous pouvez personnaliser le message via la partie ci-dessous (erreur 403)

3. Messages d'erreurs personnalisés

La deuxième possibilité que nous allons étudier est la personnalisation des messages d'erreurs HTLM dont voici les les principaux:

La syntaxe dans le fichier (où le ficher est à créer suivant votre site) est:

ErrorDocument 401 http://www.mon-site.be/401.html

ErrorDocument 403 http://www.mon-site.be/403.html

ErrorDocument 404 http://www.mon-site.be/404.html

ErrorDocument 500 http://www.mon-site.be/500.html

...

Les différents documents sont à créer sur le serveur reprenant le message personnel suivant le type d'erreur rencontré. Petit trucs:

Vous pouvez également pour l'exemple 404 par exemple faire une redirection par le header: <meta http-equiv="refresh" content="3; URL=http://www.ybet.be"> qui renvoie automatiquement le visiteur sur la page d'accueil après 3 secondes.

Vous pouvez également entrer les pages d'arrivées dans une table pour les erreurs 404 en utilisant la commande PHP $_SERVER["HTTP_REFERER"] qui renvoit l'adresse complète de page précédente.

4. Fichier index par défaut.

Deux utilisations sont possibles, soit indiquer (change) la page d'entrée par défaut (par exemple que la page d'entrée s'appelle home.htm) ou empêcher l'affichage du contenu d'un répertoire en l'absence de fichiers d'entrée.

DirectoryIndex (fichiers)

Redirection vers la page home.html en remplacement de la page index.html

DirectoryIndex index.php home.html

Une erreur commune est l'affichage du nom des fichiers et dossiers en absence d'un fichier index.htm ou index.php. La solution est de rediriger le visiteurs vers une page d'erreur 403 comme ci-dessus. La commande dans l'.htaccess:

Exemple d'utilisation: DirectoryIndex index.php index.html index.htm ../erreur.htm

Ici, Apache va vérifier si le fichier index.php existe, sinon, les extensions html et en dernier recours va renvoyer vers le dossier de la root au fichier erreur.htm.

Remarque, pour éviter des problèmes de duplicate content, ne le renvoyez pas vers une page connue des moteurs de recherche. Par exemple, si le dossier à protéger est \tests, et le renvoi vers la page d'index du site: ce type de redirection va afficher votre effectivement votre page d'entrée mais avec l'adresse du dossier.

5. Accepter ou refuser des visiteurs provenant d'un domaine particulier

Cette fonction va permettre d'accepter ou t'interdire les accès à partir d'un autre domaine (site). Il permet également de bloquer quelques robots ou aspirateurs de sites sous certaines conditions (à condition de connaître l'adresse IP ou le domaine d'où provient l'aspirateur. Remarque, cette liste de commande ne récupère que la dernière adresse visitée, pas la nationalité par exemple.

Allow (all, [liste de domaine])
Deny (all, [liste de domaine])
Order (Allow,Deny ou Deny,Allow)

La commande Allow (permettre) peut accepter tous (All), par défaut ou une liste de domaines. De même, la commande Deny (refuser) peut bloquer tous (all) ou une liste de domaines. La commande Order permet de spécifier si la première règle est Allow ou Deny.

Exemple:

ErrorDocument 403 http://www.ybet.be/403.htm
<LIMIT GET POST>

order deny,allow
deny from 172.135.62.32 #refuse les accès à partir de l'adresse 172.135.62.32
defy from hacking.com #refuse toute les connections du site terminant par hacking.com
deny from .ru #refuse l'accès à partir de tous les sites russes
allow from 193.48.172.2  #autorise l'accès aux visiteurs provenant de 193.48.172.2
allow all  #accepte tous les visiteurs non bloqués (order deny,allow)
</LIMIT>

Remarque: pour interdire l'accès à un dossier à Google, vous pouvez utiliser un robot.txt avec la commande

User-agent: GoogleBot # interdiction de Googlebot ou même User-agent: * #tous les robots

Cette solution n'est utilisée que pour les robots qui acceptent de suivre les recommandations du robots.txt (donc pas les aspirateurs et autres hackeurs).

6. Interdire l'accès aux robots et aspirateurs

C'est également une des application courante de ce fichier, interdire l'accès aux robots d'indexation et aspirateurs de sites en fonction de leur User Agent. Le mode Rewrite d'Apache doit être activé, en plus de supporter l'htaccess.

Les users agents sont une sorte de signature des navigateurs, robots, aspirateurs de sites, .. Tous ne sont pas mauvais et les règles suivantes ne sont qu'un exemple d'utilisation. Mieux vaut donc vérifier sur des sites plus spécialisés.

RewriteEngine on #démarre le rewriting
RewriteCond %{HTTP_USER_AGENT} ^-?$ [OR] #spécifie la manière dont les règles seront appliquées.
RewriteCond %{HTTP_USER_AGENT} Advanced\ Email\ Extractor [OR]
RewriteCond %{HTTP_USER_AGENT} @nonymouse [OR]
RewriteCond %{HTTP_USER_AGENT} Art-Online [OR]
RewriteCond %{HTTP_USER_AGENT} Crescent\ Internet\ ToolPack [OR]
RewriteCond %{HTTP_USER_AGENT} DirectUpdate [OR]
RewriteCond %{HTTP_USER_AGENT} Download\ Accelerator [OR]
RewriteCond %{HTTP_USER_AGENT} flashget [NC,OR]

RewriteRule ^.*$ http://www.tests.fr [R,L] #renvoi le visiteur vers le site tests.fr

7. Fichiers, dossiers, nom de domaine déplacés.

Les méthodes ci-dessous indiquent des fichiers, répertoires, .... déplacés de manière permanente. Ces commandes utilisent toutes RedirectPermanent source destination (la nouvelle adresse doit être une URL absolue, de type http://www.site.com/page-dossier.

Une page ancien.htm vers nouveau.htm

RedirectPermanent ancien.htm http://domaine.com/nouveau.htm

Un dossier - répertoire

RedirectPermanent /ancien http://domaine.com/nouveau/

Un nom de domaine (HTAccess placé à la racine)

RedirectPermanent / http://www.nouveau-domaine.com/

Petite remarque, ceci redirige les robots d'indexation et les visiteurs, ne change pas le lien provenant des sites externes qui sont redirigés. Tant que la redirection est présente, le visiteur est redirigé. Si vous supprimez l'ancien domaine, les liens sont perdus.

8. URL Rewriting

Sans être un spécialiste de ces procédures, l'URL Rewriting permet de réécrire à la volée (automatiquement) les noms de pages dynamiques (exemple: /index.php?ID=127) en page statique (exemple /index.php/id-127). Les règles de récritures récupèrent d'abord l'adresse de la page demandée coté serveur, réécrivent l'adresse de la page avant d'envoyer le résultat au navigateur du client. Les règles doivent être parfaitement écrites, sous peine de retrouver la même page avec plusieurs adresses différentes. Pour les CMS, et autres logiciels prêts à l'emploi, la majorité intègrent directement ou via un module complémentaire une administration permettant ce type d'action sur les URL.

Cette méthode permet par exemple de reprendre le titre de la page comme adresse. Elle est sensée permettre un meilleur positionnement des pages sur les moteurs de recherche, même si les gains sont souvent modeste (en gros uniquement des liens venant des forums qui ne reprennent que l'adresse de page comme texte du lien) mais peut également provoquer une sur-optimalisation. néanmoins, les robots n'acceptent qu'un nombre de paramètres passés (MSN bloque l'accès à la page au bout de 3 paramètres, comme ?id=127&langue=fr&famille=info). Pour faire passer de nombreux paramètres, cette méthode est donc conseillée.

Cette technique nécessite d'abord de créer une règle, ensuite de l'adapter à la partie dynamique du site via l'.htaccess. En théorie, si la règle est bien faite, ça ne ralentit pas trop le serveur.

Remarque, les serveurs sous OVH impose souvent /page au lieu de page dans les règles ci-dessous.

Avant toute chose, la commande

RewriteEngine on

doit être intégrée tout au début. Elle est obligatoire et préalable avant toute règle d'URL Rewriting.

En deuxième, je vous conseille de relire les parties Preg_match, les règles sont similaires, sinon identiques.

Pour débuter ...

RewriteRule preg_pmatch page_à_renommer [L].

où preg_pmatch est la règle à imposer, la chaîne de caractère à rechercher pour la transformer. Elle doit débuter par le caractère ^et terminer par le caractère $

[L] ou [R], ... fini la règle et dépend du type de rewriting.

Premier exemple:

Le nom de la page est http://www.ybet.be/article.php?numero =10&cat=3. Nous souhaiterions la renommer en http://www.ybet.be/article-10-3.htm.

RewriteRule ^article-([0-9]+)-([0-9]+)\.htm$  article.php?numero=$1&cat=$2  [L]

Quelques explications: La page finale doit donc être:

Quelques explications:( [0-9]+) est similaire à la commande Preg_match vue dans un autre chapitre, [0-9] désigne un intervalle, soit ici de 0 à 9. Nous pouvons également par exemple utiliser [A-Z], le + qui suit permet de déterminer une ou plusieurs occurrence, par exemple numero ci dessus est 10, soit constitué de 1 et de 0 (2 fois). Cette règle va donc définir tout nombre entiers >= 0. Cette partie est entre parenthèse et permet de la mettre dans une variable. C'est la première et elle s'appelle $1. Le tiret qui suit cette première partie permet de couper la variable. La deuxième occurrence ([0-9)+) va permettre de récupérer une deuxième partie de chiffres (ici le numero de CAT). Elle est suivie de \.htm$ pour terminer et ajouter à la chaîne.

La deuxième partie reprend la partie à rechercher, tout simplement en remplaçant les numéros par les variables récupérées dans la première partie, soit, $1, $2, ...

Le résumé des règles:

. n'importe quel caractère.
[xyz] un des caractère dans la liste, ici, x, y ou z
[^xyz] n'importe quel caractère tant qu'il n'est pas dans la liste
exp1|exp2 exp1 OU exp2, un des deux
+ une ou plusieurs fois l'expression devant le +
* pas l'expression ou plusieurs
texte texte de début d'expression à ajouter ou regroupement suivant les variables ($1, $2, ...)
$ fin de ligne
\ permet d'insérer le caractère qui suit sans signification dans la règle, par exemple pour le .de l'extension (htm est considéré comme du texte).

Les deux drapeaux principalement utilisés.

[L]
permet de sortir de la boucle. Ca permet par exemple de créer un rewriting pour un navigateur particulier par exemple (avec un RewriteCond %{HTTP_USER_AGENT} , mais surtout d'imposer différentes règles les unes à la suite de l'autre.
[R] ou [R=XXX]
Sans argument, elle impose une redirection temporaire 302. Les codes qui peuvent être utilisés sont:
  • 301: changement définitif, lors d'une réécriture d'une partie précédemment non URL rewritée.
  • 302: changement temporaire. Cette dernière est parfois utilisée par des annuaires qui ne souhaitent pas renvoyer véritablement le lien.

Exemple: déplacement définitif de la page ancienne.htm par nouvelle.php

RewriteRule ^nouvelle\.php$ ancienne.htm [R=301,L]

9. Pour terminer

Les règles et commandes ci-dessus ne sont qu'un petit résumé de ce qui peut être fait avec un fichier HTACCESS. Elles sont à vérifier avant de les implanter sur un serveur en activité puisqu'elles peuvent sous certaines conditions bloquer l'accès au site ou à un dossier, éventuellement bloquer l'accès à des visiteurs "intéressants" comme les robots d'indexation.

En complément:

Protéger les accès à un site: détection et interdiction des copies automatiques, injection SQL, ... avec PHP - MySql

> 6. Programmer en javascript

<3. Un petit aperçu des CMS.

Magasin informatique YBET à Chiny, formations