Qu’est-ce que ce fameux fichier htaccess ? Après avoir vu les aspect du crawling de site, essayons d’y voir plus clair sur les possibilités de ce fichier. Je vais tenter d’en définir les contours dans un premier temps, puis ensuite ferai un listing en 5 grandes catégories regroupant 25 fonctions de ce couteau suisse. Je me doute bien que pour les initiés rien de neuf, qu’un bref rappel, et pour ceux moins attachés au code, des découvertes sur son potentiel peuvent se produire, c’est du moins, ce que j’espère faire passer au travers de ces quelques lignes !
Qu’est-ce qu’un fichier htaccess ?
C’est un vieux vétéran du monde du web qui sert à configurer la plupart des serveurs web de l’internet (65%) , les serveurs apache, dont il contrôle l’accès aux données du site pour faire succinct.
Matériellement, c’est tout simplement un fichier ASCII (American Standard Code For Information Interchange) , soit un fichier texte lisible par un éditeur de texte comme wordpad dans windows et compréhensible par l’œil humain, au détriment d’un fichier binaire qui lui contient des codes binaires destinés aux machines.
Il peut s’exécuter uniquement dans un environnement serveur Apache, par windows (nt).
Il n’y a pas qu’un seul fichier htaccess par site web, mais souvent plusieurs , ils peuvent s’exécuter à la racine de chaque dossier selon les directives assignées.
Quand faut-il l’utiliser ?
Bien souvent le mieux c’est de ne pas l’utiliser ! Bon alors, il ne sert à rien ? Non tout de même pas ! Quand vous avez la main sur les fichiers principaux de configuration d’un serveur apache (httpd.conf entre autre) et uniquement dans ce cas-là, rien ne sert à utiliser les vertus du fichier htaccess et autres directives modulaires.
En revanche, pour ceux qui n’ont pas accès via leur hébergement (comme par exemple les formules des serveurs mutualisés, virtuels etc..) , c’est un fichier incontournable ! Bon, ceci dit, pas de panique, les systèmes de CMS aujourd’hui déjà pré-paramètres les directives de leur fichier htaccess .
Donc, nouvelle question, à quoi cela sert alors ?
Tout simplement, parfois, pour affiner des développements supplémentaires non prévus par certaines plateformes, renforcer certains paramètres de sécurité sur certaines zones de son site, optimiser certains aspects de l’hébergement (organisation personnelle) ou du site web en lui même.
Et puis, en savoir un petit peu plus, sur comment fonctionne certains éléments, peuvent servir à appréhender des subtilités du net.
Précision : Htaccess or Robot.txt au fait ?
Pour clarifier, la première demande faîte au serveur du navigateur, arrive sur le fichier .htaccess , non lisible par un bot ou un navigateur, il pourra permettre ou pas la lecture de fichier ou dossier. Le robot.txt quant à lui, sert d’aiguilleur à destination des crawlers pour l’indexation ou pas d’URLs ou sections du site.
Panoplie des pouvoirs de l’htaccess
Afin d’avoir une vue plus synthétique, j’ai regroupé dans 5 catégories 25 fonctionnalités le pouvoir de l’htaccess. Les exemples ont été récupérés de part et d’autre sur le net, ils sont prêt à l’emploi mais restent à personnalisés selon sa configuration.
- Sécurité
- Seo
- Site (performance)
- Serveur
- Expérience Utilisateur (UX)
Sécurité avant tout !
Protéger le fichier .htaccess lui même
#htaccess file<files .htaccess> order allow,deny deny from all </files>
Protéger un fichier en particulier
# protége monfichier.php <files monfichier.php> order allow,deny deny from all </files>Un fichier protégé par mot de passe
<Files secure.php> AuthType Basic AuthName “Prompt” AuthUserFile /home/path/.htpasswd Require valid-user </Files>Des fichiers protégés par mot de passe
<FilesMatch “^(execute|index|secure|insanity|biscuit)*$”> AuthType basic AuthName “Development” AuthUserFile /home/path/.htpasswd Require valid-user </FilesMatch>Parade contre les injections via des scripts malveillants du march
Options +FollowSymLinks RewriteEngine On RewriteCond %{QUERY_STRING} (<|%3C).*script malveillant.*(>|%3E) [NC,OR] RewriteCond %{QUERY_STRING} GLOBALS(=|[|%[0-9A-Z]{0,2}) [OR] RewriteCond %{QUERY_STRING} _REQUEST(=|[|%[0-9A-Z]{0,2}) RewriteRule ^(.*)$ index.php [F,L]Désactiver la signature du serveur
# désactiver signature serveur ServerSignature OffLimiter la taille en upload de téléchargement
# limité à 10mb LimitRequestBody 10240000Blacklistage par adresse ip
#qui a accès ou pas <Limit GET POST PUT> order allow,deny allow from all deny from 123.456.7xx deny from 93.121.7xx deny from 223.956.7xx deny from 128.456.7xx </LIMIT>#Accepter l’accès à un dossier du serveur pour 1 ip
#Plusieurs adresses IP sont possibles , avec une instruction par ligne. AuthUserFile /dev/null AuthGroupFile /dev/null AuthName “Example Access Control” AuthType Basic <LIMIT GET> order deny,allow deny from all allow from xx.xx.xx.xx </LIMIT>Empêcher la navigation sur un dossier
# Stopper la navigation Options All –IndexesExperience Utilisateur
Rediriger selon les erreurs serveurs sur des pages personnalisées
#custom error docs ErrorDocument 404 /introuvable.php ErrorDocument 403 /nonautorise.php ErrorDocument 500 /erreur.phpRediriger vers une page de maintenance
Remplacer la page dénommée maintenance.html par la page que sur laquelle vous souhaitez rediriger le visiteur avec l’adresse ip voulue. Notez la redirection 302 pour éviter l’indexation de cette page temporaire.
Reécriture Url
Options +FollowSymlinks RewriteEngine on RewriteRule ^page1.html$ page2.html [L] RewriteRule ^page2.html$ page1.html [L]Pure Seo
/
Bloquer des domaines referents.
# Configuration d’une directive canonique
RewriteEngine On RewriteCond %{HTTP_HOST} ^yourdomain.com$ [NC] RewriteRule ^(.*)$ http://www.yourdomain.com/$1 [R=301,L]#Refuser les connexions sans referer / Protection contre les spams de commentaires
#Le code inspecte le référent de la page sur l’accès au fichier de commentaires, si il est dénué de provenance du blog, il ne permet pas le commentaire.
# forcer la barre oblique “/” (lutter un peu contre le duplicate)
<ifModule mod_rewrite.c> RewriteCond %{REQUEST_URI} /+[^\.]+$ RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R=301,L] </ifModule>#Redirect Www To Non Www Or Vice Versa (se battre contre la duplication de contenus)
RewriteEngine On RewriteBase / RewriteCond %{HTTP_HOST} ^www.yourblogname.com [NC] RewriteRule ^(.*)$ http://yourblogname.com/$1 [L,R=301] RewriteEngine On RewriteBase / RewriteCond %{HTTP_HOST} ^yourblogname.com [NC] RewriteRule ^(.*)$ http://www.yourblogname.com/$1 [L,R=301]Source: http://www.webanddesigners.com/20-htaccess-hacks-to-prevent-your-wordpress-site-from-hacking/
Performance serveur
#Limiter le nombre de connexions simultanées
MaxClients < number-of-connections>
#Configurer la timezone du serveur
SetEnv TZ America/Indianapolis
#Désactiver l’utilisation des images sur son serveur
RewriteEngine On #Replace ?monsite.com/ avec votre url RewriteCond %{HTTP_REFERER} !^http://(.+.)?monsite.com/ [NC] RewriteCond %{HTTP_REFERER} !^$ #Replace /images/pasdimage.jpg avec votre url propre RewriteRule .*.(jpe?g|gif|bmp|png)$ /images/ pasdimage.jpg [L]Performance site
# Désactiver ETAGS (permet un soulagement du serveur, mais souvent au détriment du navigateur donc à éviter, provoque des ralentissements )
<filesMatch “\\.(ico|pdf|flv|jpe?g?|png|gif|js|css|swf|txt|mp3|avi|mpe?g?|wmv)$”> FileETag none </filesMatch># Permettre la compression
<ifModule mod_deflate.c> AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/x-javascript BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch \bMSIE !no-gzip !gzip-only-text/html </ifModule>#Utiliser le cache navigateur pour accélerer le chargement du site
<IfModule mod_expires.c> ExpiresActive On ExpiresByType image/jpg “access 1 year” ExpiresByType image/jpeg “access 1 year” ExpiresByType image/gif “access 1 year” ExpiresByType image/png “access 1 year” ExpiresByType text/css “access 1 month” ExpiresByType application/pdf “access 1 month” ExpiresByType text/x-javascript “access 1 month” ExpiresByType application/x-shockwave-flash “access 1 month” ExpiresByType image/x-icon “access 1 year” ExpiresDefault “access 2 days” </IfModule>Source: http://www.onextrapixel.com/2011/11/03/unleashing-htaccess-for-wordpress/
#Configurer un site pour HTML5 Vidéos (facultatif, si seulement cette préconfig n’existe pas dans le serveur)
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} !=/favicon.ico AddType text/xml .xml AddType video/mp4 .mp4 .m4v AddType video/mpeg .mpeg .mpg AddType video/quicktime .mov AddType video/ogg .ogv AddType video/webm .webm AddType audio/mp4 .m4a .m4b .m4r AddType audio/mpeg .mp3 AddType audio/playlist .m3u AddType audio/x-scpls .pls AddType audio/ogg .ogg AddType audio/wav .wav AddType application/x-shockwave-flash swfSource: http://snipplr.com/view.php?codeview&id=53437
http://ottopress.com/2011/howto-html5-video-that-works-almost-everywhere/