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
- Apache — Access Control
- Apache — Authentification, autorisation et contrôle d'accès
- Apache — mod_auth_basic
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 :
- 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é. - Une URL vers un serveur externe, vers lequel la redirection sera effectuée.
- 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
- Apache — Index de l'ensemble des directives du Serveur HTTP Apache Version 2.2
- Apache — Dictionnaire des directives du Serveur HTTP Apache Version 2.2
- Apache — Documentation du Serveur HTTP Apache Version 2.2
- Apache — Tutoriel Apache : fichiers .htaccess
- Apache — Directive
Options
- Wikipedia — Liste des codes de statuts HTTP réponses
- W3C — HTTP/1.1: Status Code Definition (Norme RFC 2616)