Le .htaccess des pages perso

Les Pages Perso Chez Free

Par Alain Guerin, le , dans Créer ses pages perso. / Dernière modification : le par Al. (merci à Hubert, PHPKernel, Nan'Art, mithril94 et luciole135)
Tags : Apache, Erreur 403, Erreur 500, PHP, Sécurité, Tutoriaux

On entend parler de temps à autres d'un machin qui s'appelle « le .htaccess » (prononcer « point hache té axe esse », par exemple). À quoi ça sert au juste ? J'en ai besoin d'un ? Qu'est-ce qu'il faut mettre dedans ? Qu'est-ce qu'on peut mettre dedans ?

Généralités

La version courte : Les .htaccess sont des fichiers « utilisés » par le serveur pour personnaliser l'accès aux pages web.

La version longue :

Les fichiers .htaccess (ou « fichiers de configuration distribués ») fournissent une méthode pour modifier la configuration du serveur au niveau de chaque répertoire. Un fichier, contenant une ou plusieurs directives de configuration, est placé dans un répertoire de documents particulier, et ses directives s'appliquent à ce répertoire et à tous ses sous-répertoires.

Afin d'éviter les problèmes de transferts par FTP dans certaines configurations, il est conseillé de terminer le fichier par un saut de ligne.

Sur l'hébergement de Free, les directives permises sont limitées et non documentées officiellement, ce qui complique la tache des webmasters. Je tente ici d'en faire une liste aussi exhaustive que possible. La documentation spécifique de chaque directive Apache est disponible sur le site de la Fondation Apache : Documentation du Serveur HTTP Apache Version 2.2.

Toutes les directives Options peuvent être ajoutées ou supprimées de la configuration initiale de Apache en précédent les directives par + ou - selon les besoins. Ces directives Options peuvent être associées en une seule et même ligne, en les séparant par un espace (par exemple Options -Includes -Indexes +MultiViews).

Le fichier .htaccess « minimal » pour les pages perso de Free

Ce fichier est à placer à la racine du compte. Il permet de configurer de manière minimale le serveur Apache pour votre compte.

<IfDefine Free>
php 1
</IfDefine>
Options -Indexes

Si votre site est uniquement constitué de page html statiques (pas d'utilisation de PHP), vous pouvez utiliser ces directives en remplacement des précédentes, plus appropriées à votre cas (si vous utilisez des Server Side Includes, retirez la directive -Includes) :

Options -Indexes -ExecCGI -FollowSymLinks -Includes

La fonction la plus connue est la limitation d'accès

Avec un .htaccess, il est possible d'interdire l'accès à un site ou un répertoire, à tout le monde ou de le restreindre seulement à certaines personnes.

Pour limiter l'accès (en rappelant que chez Free, un site doit avoir au moins une certaine partie du site en accès libre à tout visiteur), les explications sont données dans la faq de Free : personnalisation des pages (restrictions). À noter que les mots de passe sont stockés en clair dans le fichier de mots de passe : il convient donc de protéger ce fichier contre les accès (deny from all dans le .htaccess du répertoire le contenant), lui aussi !

Méthode

Il est possible de restreindre l'accès à un dossier (et à ses sous-dossiers) par un ou plusieurs couple(s) identifiant(s)/mot(s) de passe.

Les lignes à insérer dans le .htaccess sont les suivantes :

PerlSetVar AuthFile /chemin_du_dossier_depuis_la_racine_du_compte/.htpasswd
AuthName "Acces Restreint"
AuthType Basic
require valid-user

Ce fichier est à placer directement dans le dossier à sécuriser.

Il faut ensuite créer un fichier texte contenant le ou les couple(s) d'identifiant(s)/mot(s) de passe (non chiffré) que l'on nommera .htpasswd. Par exemple :

administrateur:super_mot_de_passe
utilisateur:youpi

Il est possible de placer ce fichier à n'importe quel endroit sur l'espace Web, mais si celui-ci est placé dans un répertoire différent de celui à protéger, on le protègera des intrusions en créant un autre fichier .htaccess en plaçant deny from all à l'intérieur, ce qui bloquera l'accès au dossier (et aux sous-dossiers) automatiquement.

Il est possible de mettre en place des restrictions plus spécifiques : par utilisateur, adresse IP, domaines. Vous pouvez aller faire un tour dans la documentation Apache) pour avoir toutes les infos.

Liens utiles

D'autres fonctions sont également fournies : (voir « Les directives autorisées »)

Il est possible de forcer l'utilisation de php version 5.1.3, avec la mention php 1 dans le .htaccess.

Il est également possible d'interdire l'affichage du détail du contenu de tous les répertoires qui ne contiennent pas de fichier index.<extension> en ajoutant la mention Options -Indexes toujours dans notre .htaccess, qui, à ma connaissance, n'est pas sensible à la casse (case sensitive, pas voiture, boum, crac ;-) )

À ma connaissance, les autres fonctions habituelles du .htaccess ne sont pas autorisées chez Free. Mais, si je me trompe, je ne doute pas que les informations exactes viendront utilement compléter ou remplacer celles qui sont déjà présentes :-)

Les directives autorisées

php 1 — Active PHP 5.1.3rc4-dev « à la sauce Free » (par défaut PHP 4.4.3-dev). Il est inutile de l'activer si le site est uniquement constitué de pages HTML statiques.

Options Indexes — Active le listing de répertoire de Apache. Si précédé de -, cette option est désactivée. Cette directive autorise le listing des répertoires (Index Of /…/), même si aucun fichier d'index est présent. Pour des raisons de sécurité, il est préférable de désactiver cette option ; le serveur retournera alors une page d'erreur 403 Forbidden si aucun fichier index.<extension> n'est présent dans les répertoires.

Options MultiViews — Active la fonction MultiViews de Apache. Si précédé de -, cette option est désactivée. Cette option n'est pas active par défault dans Apache, il faut donc l'activer explicitement pour l'utiliser.

Options ExecCGI — Active l'exécution des scripts CGI/PHP. Si précédé de -, cette option est désactivée. N'est utile que dans le cas de sites avec des scripts PHP.

Options IncludesNOEXEC — Active l'inclusion de fichiers (fichier .shtml et SSI), mais interdit l'exécution des scripts PHP. Si précédé de -, cette option est désactivée. Il reste possible d'exécuter des scripts via des ScriptAlias. Si ExecCGI et Includes sont désactivées, il ne sert à rien d'activer cette directive, elle ferait double emploi.

Options FollowSymLinks — Autorise la recherche de liens symboliques dans le répertoire et ses sous-répertoires. Si précédé de -, cette option est désactivée.

Options Includes — Autorise l'inclusion de fichier. N'est utile que dans le cas de site avec des scripts PHP ou des fichiers utilisant du code SSI (fichiers .shtml). Si précédé de -, cette option est désactivée.

Les directives du module mod_autoindex, qui permet la personnalisation de l'affichage des index auto-générés par Apache, sont toutes supportées.

AddType <type mime> .<extension associée> — Défini un type mime spécifique pour un type de fichier (par exemple AddType text/css .css).

AddEncoding <type d'encodage> .<extension associée> — Défini un type d'encodage spécifique pour un type de fichier (par exemple AddEncoding gzip .gz).

AddHandler <méthode> .<extension associée> — Défini une méthode spécifique pour gérer un type de fichier (par exemple AddHandler application/x-httpd-fastphp .html).

AddCharset <charset> .<extension associée> — Défini un charset spécifique pour gérer un type de fichier (par exemple AddCharset iso-8859-15 .html).

AddLanguage <langue> .<extension associée> — Défini une langue spécifique à un type de fichier (par exemple AddLanguage fr .html).

LanguagePriority <langue(s)> — Défini la préséance des langues sur le site (par exemple LanguagePriority en fr de. C'est-à-dire que, pour une même ressource spécifique disponible en plusieurs langues, le serveur retournera la ressources associée à la première langue « principale » définie, si aucune préférence n'est indiquée par le visiteur lors de la requête.

DefaultLanguage <langue> — Défini une seule langue « principale » pour l'ensemble des fichiers textes sur le serveur (par exemple DefaultLanguage fr). Cette directive peut être outrepassée pour certains fichiers via AddLanguage. Elle ne peut servir qu'à spécifier une seule langue.

AddDefaultCharset <charset> — Défini un charset pour l'ensemble des fichiers textes sur le serveur (par exemple AddDefaultCharset utf-8). Cette directive peut être outrepassée pour certain fichier via AddCharset. Définir un charset permet d'accélérer le temps de rendu dans le navigateur.

Les directives Order Allow et Deny et leurs diverses applications sont autorisées.

Les directives Satisfy All et Any et leurs diverses applications sont autorisées.

Il est possible d'utiliser les directives <Files>…</Files> sur les pages perso de Free, cependant le serveur n'accepte qu'un seul couple de balises <Files>…</Files> par fichier .htaccess. Il est possible d'utiliser les expressions régulières ou les noms de fichier. Les balises doivent être au format :

<Files ~ "^*\.(…)">
Directives
</Files>

ou

<Files "nom-du-fichier.<extension>">
Directives
</Files>

Les balises <IfModule>…</IfModule> et <IfDefine>…</IfDefine> sont possibles. Par exemple :

<IfModule mod_<nom du module>.c>
Directives
</IfModule>

ou

<IfDefine Free>
php 1
</IfDefine>

Les redirections

Il est possible de réaliser des redirections d'une URL vers une autre via le fichier .htaccess sur les pages perso de free, pour préciser qu'un dossier à déménagé, qu'une URL n'existe plus ou à été déplacée… Un très bon tutoriel est disponible sur le site d'Alexandre Alapetite.

Redirection de la racine vers un sous dossier ou une page

Pour rediriger vers un répertoire du site, la FAQ encore : redirection automatique vers un répertoire

La meilleure méthode pour rediriger vos visiteurs automatiquement vers le sous-dossier de votre site – ou une page spécifique – passe par Apache. Voici la méthode :

RedirectMatch permanent ^/$ http://monsite.free.fr/votre-sous-dossier/

Liens utiles

Les pages d'erreur personnalisées

Il est possible d'utiliser la directive ErrorDocument pour personnaliser les pages d'erreurs reçues par les visiteurs. Voici quelques exemples :

ErrorDocument 410 /detruit.php
ErrorDocument 500 "Désolé, script craché... pas de chance !
ErrorDocument 403 http://monsite.free.fr/pas-trouve
ErrorDocument 404 /erreur/perdu.html
ErrorDocument 401 /inscription/comment-sinscrire.html

La syntaxe à utiliser est : ErrorDocument <code-à-3-chiffres> <action> où le code à trois chiffres représente le code d'erreur reçu par le client (400 à 499 et 500 à 599) et où l'action peut désigner :

  1. Un message à afficher. Le message doit être précédé par des guillemets ("). Tout ce qui est précédé par les guillemets sur la même ligne est affiché.
  2. Une URL vers un serveur externe, vers lequel la redirection sera effectuée.
  3. Une URL locale vers laquelle la redirection sera effectuée.

Pour remplacer la page d'erreur, c'est toujours dans la FAQ : personnalisation des pages d'erreur

Information supplémentaire : comment protéger le .htaccess contre les accès extérieurs

Normalement, la configuration par défaut des serveurs de Free protège le .htaccess contre la lecture, ce qui signifie qu'un malin qui essaie de lire http://votresite.free.fr/.htaccess se verra rembarrer et en sera pour ses frais. Mais il vaut mieux ne pas se fier à la configuration par défaut, et protéger le .htaccess explicitement en mettant ce qui suit… dans le .htaccess :

<Files ".ht*">
Order allow,deny
Deny from all
Satisfy all
</Files>

Inclure ou exclure des directives spécifiques au serveur de Free

En utilisant les balises conditionnelles <IfDefine></IfDefine>, vous pouvez ajouter des directives spécifiques au serveur de Free :

<IfDefine Free>
php 1
</IfDefine>

Pour exclure des directives de la configuration sur le serveur de Free :

<IfDefine !Free>
AddType application/x-httpd-php5 .php
</IfDefine>

Liens et ressources utiles pour le fichier .htaccess