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.

repartition-serveurs-web

Part de marché des serveurs dans le monde

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.

Fichier htaccess sur hébergeur

Fichier htaccess sur hébergeur

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)
5 Domaines pour l'htaccess

5 Domaines pour l’htaccess

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 Off

Limiter la taille en upload de téléchargement

# limité à  10mb
LimitRequestBody 10240000

Blacklistage 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 –Indexes

Experience 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.php

Rediriger 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.

RewriteEngine on
RewriteCond %{REQUEST_URI} !/maintenance.html$
RewriteCond %{REMOTE_ADDR} !^123.123.123.123
RewriteRule $ /maintenance.html [R=302,L]

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.

RewriteEngine on
RewriteCond %{HTTP_REFERER} oogle.com [NC]
RewriteRule .* – [F]

# 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.

Changer la ligne 4 and et spécifier l’url.
RewriteEngine On
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{REQUEST_URI} .scriptdecommentaire.php*
RewriteCond %{HTTP_REFERER} !.*votredomaine.com.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^$
RewriteRule (.*) ^http://%{REMOTE_ADDR}/$ [R=301,L]

# 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 swf

Source: http://snipplr.com/view.php?codeview&id=53437

http://ottopress.com/2011/howto-html5-video-that-works-almost-everywhere/

Webographie