➜➜➜➜htaccess apache rewriting

htaccess apache rewriting
» pages » htaccess apache rewriting » « Prev Next »
  • Apache vhosts directive
  • Htaccess apache rewriting
  • Url Rewriting
  • Apache Directives Noyau
  • .htaccess rewriting et expre
  • 1and1 php5 htaccess
  • Logs Apache
  • Mr Propre Url Rewriting Conf
  • Les principales utilisations du htaccess avec Apache 

    La configuration Apache offre de multiples possibilités. On peut placer des options au niveau du serveur Apache dans son ensemble, au niveau de la déclaration d'alias ou même de virtual hosts. Les options peuvent avoir un effet sur le fichier par défaut qui sera ouvert pour une url (index.html / index.php par défaut), sur les droits d'accès ou bien d'autres choses. Mais on n'a pas toujours accès directement à la configuration Apache. Nous verrons comment l'utilisation de fichiers htaccess peut nous aider.

    1. Un fichier htaccess pourquoi et comment ?

    Les fichiers htaccess servent à préciser des options de configuration sur un site / une partie d'un site web quand on n'a pas accès au fichier de configuration Apache. Les options qui y sont précisées portent sur :

    - le dossier dans lequel le fichier htaccess est placé
    - toute l'arborescence de ce dossier (fichiers et sous dossiers compris)

    Le fichier htaccess est donc particulièrement pratique pour personnaliser les options, particulièrement en ce qui concerne :

    - filtrer l'accès par IP
    - protéger des informations par demande de login / mot de passe
    - personnaliser les pages d'erreur

    Afin que les options présentes dans le htaccess puissent surcharger celles du fichier de configuration Apache elles doivent être autorisées dans ce dernier au niveau de la configuration du serveur ou au niveau du virtual host. C'est l'option 'AllowOverride'. Cette option peut prendre les valeurs suivantes :

    - None : interdit toute surcharge des options. Apache ne lira même pas les fichiers htaccess
    - Authconfig : les directives utilisateurs / groupes est permise afin de mettre en place une authentification par login / mot de passe.
    - FileInfo : les directives concernant les types de documents sont possibles.
    - Indexes : le changement de méthode d'indexation des répertoires peut se faire.
    - Limit : permet de filtrer les accès par IP et / ou nom d'hôte.
    - Options : permet l'utilisation de directives spéciales.
    - All : permet tout cela.

    Nous allons essayer de faire le tour des possibilités les plus intéressantes.


    2. Restreindre l'accès par login / mot de passe

    C'est une des utilisations courantes du htaccess. Cela permet de réserver certaines parties d'un site web à certaines personnes d'une manière facile, rapide et fiable.
    Le contenu du fichier .htaccess :
    .htaccess
    AuthUserFile '/xxx/xxx/.htpasswd' 
    AuthGroupFile '/xxx/xxx'
    AuthName Authentification
    AuthType Basic

    require user Daniel
    require user Bernard
    AuthName indique le domaine d'identification. Ce nom sera affiché dans la fenêtre d'authentification

    AuthType indique le type d'identification qui sera utilisée. Il est possible de choisir basic ou digest, ce dernier offre l'avantage de ne pas transmettre le mot de passe en clair sur le réseau.
    AuthUserFile et AuthGroupFile indiquent respectivement l'emplacement du fichiers des utilisateurs et des groupes. Pour ma part je me contente de définir des utilisateurs.
    require peut être suivi de valid-user pour n'importe quel utilisateur défini dans le fichier passwd, de user et du nom d'un utilisateur ou de group et du nom d'un groupe afin que ses membres bénéficient de l'accès.

    Générer les mot de passe utilisateurs dans le fichier .htpasswd :
    Sous Linux, il suffit d'utiliser htpasswd qui est fourni avec Apache.

    htpasswd [option] Chemin-du-fichier-htpasswd nom-utilisateur
    l'utilitaire demandera la saisie du mot de passe et sa confirmation.

    les options :
    -c pour créer un nouveau fichier utilisateurs (attention à ne pas écraser un fichier existant)
    -b pour empêcher le chiffrement du mot de passe dans le fichier
    -m, -s ou -p indiquent l'algorithme de chiffrement à utiliser : MD5, SHA ou texte brut

    Sous Windows, il faut utiliser un utilitaire téléchargé sur le web, on en trouve beaucoup. Vous pouvez par exemple utiliser le htpasswd.exe fourni avec EasyPHP ou WAMPSERVER, 2 des solutions Apache MySQL PHP packagées pour Windows. Le principe d'utilisation est le même que pour Linux.
    Cependant ,il semble que, sous windows, la gestion des mots de passe cryptés ne passe pas très bien, l'option -b est alors particulièrement appréciable.
    Exemple de fichier .htpasswd sous linux
    # Fichier d'utilisateurs
    Bernard:INmsgXRs1Jrp
    Jo:INCOMIEKoURCQ
    Marco:INCfhO9AT/Muw
    Robert:INYCtEpsjrBzc
    Exemple de fichier .htpasswd sous windows
    # Fichier d'utilisateurs
    Bernard:romeo
    Jo:albert
    Marco:papagaga
    Robert:exemple
    Exemple de fichier group
    # Fichier de groupes
    projet: Jo Marco Robert

    3. Filtrer les IP / noms d'hôtes

    Dans un contexte d'adresses ip fixes ou de noms de machines qui ne changent pas, il est possible de filtrer les accès à certains dossiers sur ces critères. Pour ma part, je ne suis pas persuadé de l'efficacité de ce système, tant il est facile de changer le nom d'un PC ou de passer par un proxy pour masquer son adresse IP réelle. Je ne la conseille donc pas pour gérer la sécurité d'accès à des données sensibles, du moins pas sans une identification par login / mot de passe en complément.

    Cette technique peut toutefois être fonctionnellement avantageuse, tout dépend des besoins.

    Il y a 3 directives à connaître, c'est extrêmement simple : order, deny et allow. La directive order définit l'ordre dans lequel on prendra en compte les directives deny et allow, c'est là le plus important.

    Ces deux exemples donneront exactement le même résultat :
    Exemple 1
    Order Deny, Allow 
    Allow from 192.168.0.2
    Deny from all
    Exemple 2
    Order Deny, Allow 
    Deny from all
    Allow from 192.168.0.2
    Dans cet exemple, on passe d'abord la directive deny sur tout le monde et ensuite la directive allow pour l'adresse IP 192.168.0.2 qui sera la seule à pouvoir accéder au dossier oùse trouve le fichier htaccess (et auxfichiers et sous dossiers qu'il contient).

    Àla place d'une adresse ip indiquer on peut indiquer (pour les directives allow et deny) :
    Un nom de domaine, même partiel
    Deny from .domaine.net
    Des masques d'adresses ip
    Deny from 192.168.1 
    Deny from 192.168.1.0/255.255.255.0
    Ces directives utilisables dans un fichier htaccess le sont aussi dans le fichier de configuration Apache dans la définition des alias.

    4. Personnaliser les pages d'erreur

    Il est possible de personnaliser les pages / messages d'erreur qui seront affichées en cas d'erreur. La plus connue de ces erreurs est le fameux code 404 qui indique qu'une page / ressource n'a pas été trouvée. Les déclarations sont extrêmement simples.
    ErrorDocument 403 'Accès à ce répertoire non autorisé'.
    ErrorDocument 404 404.html
    ErrorDocument 500 http://www.site.net/error/500.html
    Le tout est de connaître les codes d'erreurs pour lesquels on souhaite personnaliser une page. Les principaux codes HTTP sont les suivants :
    400 Bad Request
    401 Authorization Required
    402 Payment Required
    403 Forbidden
    404 Not Found
    407 Proxy Authentication Required
    415 Unsupported Media Type
    500 Internal Server Error
    503 Service Temporarily Unavailable
    504 Gateway Time-out
    505 HTTP Version Not Supported
    507 Insufficient Storag

    5. Personnaliser la navigation dans l'index des fichiers

    Parfois, il peut être plus pratique de laisser la navigation dans un dossier sous forme d'index de fichiers plutôt que de faire une page. Par exemple si on veut proposer une quantité importante de fichiers accessibles, que ce soit en téléchargement ou en consultation, et à plus forte raison si on est amené à en ajouter, retirer ou modifier (le nom souvent).

    Afin d'améliorer un peu le visuel, il est possible de personnaliser la description des fichiers affichés dans l'index ainsi que l'icône qui leur est associée.
    Exemple de htaccess
    AddDescription 'Fichier texte, affichable' *.txt
    AddDescription 'Fichier , à télécharger' *.
    AddDescription 'Archive ZIP, à télécharger' *.zip
    AddIcon http://a74.fr/htaccess/ .jpg
    AddIcon http://a74.fr/htaccess/txt.jpg txt
    AddIcon http://a74.fr/htaccess/zip.jpg zip
    AddIcon http://a74.fr/htaccess/win.jpg ^^DIRECTORY^^
    AddIcon http://a74.fr/htaccess/rien.jpg ^^BLANKICON^^
    Résultat :

    "http://a74.fr/articles/web/apache/htaccess/images/index.jpg" alt="index personnalisé" />
    Explication :

    - la directive AddDescription, comme son nom l'indique, ajoute une description en fonction de l'extension du fichier. Sa syntaxe est AddDescription ''
    - la directive AddIcon, elle, associe une image (qui sera utilisée en icône dans la liste de fichier) à une extension. Sa syntaxe est AddIcon

    "http://www.developpez.be/images/kitwarning.gif" alt="warning" /> Attention à ne pas choisir d'images qui prennent trop de place, sinon l'index des fichiers serait particulièrement désagréable à parcourir.
    Il est aussi possible d'utiliser le type mime du fichier pour faciliter le travail quand, par exemple, on veut appliquer le même traitement à plusieurs extensions. On peut ajouter des types mime comme suit :
    Définition de types mime
    AddType text/html htm html shtml
    Il ne reste plus qu'à leur associer leur icône.
    Personnalisation de l'icone d'un type mime
    AddIconByType text/html http://a74.fr/htaccess/html.jpg
    La liste des types mime est présentée en annexe.

    On peut aussi personnaliser d'autres éléments de l'affichage comme l'en-tête, que l'on peut gérer dans un fichier html par exemple.
    Remplacement de l'entête
    HeaderName entete.html
    Cela prendra le fichier entete.html de chaque dossier pour personnaliser l'entête des index de fichiers. Afin de protéger les fichiers qui ne doivent pas être listés on ajoutera la directive :
    IndexIgnore entete.html
    En effet, nous n'avons aucun intérêt à présenter ce fichier au public. Et enfin, voyons l'ordre de tri des fichiers. Nous utiliserons pour cela ce type de directives :
    IndexOrderDefault Ascending
    IndexOrderDefault Ascending Date
    IndexOrderDefault Ascending Size
    IndexOrderDefault Ascending Description
    IndexOrderDefault Descending
    IndexOrderDefault Descending Date
    IndexOrderDefault Descending Size
    IndexOrderDefault Descending Description

    6. Gérer les changements d'URL

    Un site web, normalement, est vivant. Il est amené à évoluer et à changer, y compris dans l'organisation et l'emplacement des documents. Dans ce cas, pour que les anciens liens qui ont référencés un peu partout ne se transforment pas en liens morts, on gère des redirections, c'est à dire que les requêtes HTTP adressées aux anciennes adresses vont être redirigées vers les nouvelles.
    Dans le cas d'une structure simple, pas de souci. Par exemple dans le cas de cet article (adressé sur l'url http://a74.fr/articles/web/Apache/htaccess/), c'est en fait le fichier index.php (fichier lu par défaut par Apache) qui est utilisé. Il suffirait de le changer par :
     

    'refresh'
    Content='0;URL='>

    Et le tour est joué. Mais on peut avoir des cas plus complexes à gérer : des redirections de fichiers, ainsi quedossiers complets et peut-être même de domaines.... On ne peut pas mettre autant de fichiers redirecteurs qu'on avait de documents... On va donc utiliser la directive RedirectPermanent dans le htaccess.
    Pour un fichier
    RedirectPermanent /dossier/ancienfichier.ext http://a74.fr/articles/web/Apache/htaccess/
    Pour un dossier
    RedirectPermanent /dossier http://a74.fr/articles/web/Apache/htaccess/
    Pour un domaine
    RedirectPermanent / http://a74.fr/articles/web/Apache/htaccess/
    Notons que, pour l'ancien fichier / dossier, on met le chemin depuis la racine de son site et que, pour le nouveau chemin, à savoir la redirection, on met l'url complète.
    "http://php.developpez.com/faq/?page=concepts#concepts_redirection" class="lienArticle">

    7. Annexes

    "http://php.developpez.com/faq/?page=concepts#concepts_redirection" class="lienArticle">

    7.1. Types mime

    Type Description Extensions
    application/acad Fichiers AutoCAD dwg
    application/clariscad Fichiers ClarisCAD ccad
    application/drafting Fichiers MATRA Prelude drafting drw
    application/dxf Fichiers AutoCAD dxf
    application/i-deas Fichiers SDRC I-deas unv
    application/iges Format d'échange CAO IGES igs, iges
    application/octet-stream Fichiers binaires non interprétés bin
    application/oda Fichiers ODA oda
    application/ Fichiers Adobe Acrobat
    application/postscript Fichiers PostScript ai, eps, ps
    application/pro_eng Fichiers ProEngineer prt
    application/rtf Format de texte enrichi rtf
    application/set Fichiers CAO SET set
    application/sla Fichiers stéréolithographie stl
    application/solids Fichiers MATRA Solids dwg
    application/step Fichiers de données STEP step
    application/vda Fichiers de surface vda
    application/x-mif Fichiers Framemaker mif
    application/x-csh Script C-Shell (UNIX) dwg
    application/x-dvi Fichiers texte dvi dvi
    application/hdf Fichiers de données hdf
    application/x-latex Fichiers LaTEX latex
    application/x-netcdf Fichiers netCDF nc, cdf
    application/x-sh Script Bourne Shell dwg
    application/x-tcl Script Tcl tcl
    application/x-tex fichiers Tex tex
    application/x-texinfo Fichiers eMacs texinfo, texi
    application/x-troff Fichiers Troff t, tr, troff
    application/x-troff-man Fichiers Troff/macro man man
    application/x-troff-me Fichiers Troff/macro ME me
    application/x-troff-ms Fichiers Troff/macro MS ms
    application/x-wais-source Source Wais src
    application/x-bcpio CPIO binaire bcpio
    application/x-cpio CPIO Posix cpio
    application/x-gtar Tar GNU gtar
    application/x-shar Archives Shell shar
    application/x-sv4cpio Archives Shell sv4cpio
    application/x-sv4crc CPIO SVR4 avec CRCl sc4crc
    application/x-tar Fichiers compressés tar tar
    application/x-ustar Fichiers compressés tar Posix man
    application/zip Fichiers compressés ZIP man
    audio/basic Fichiers audio basiques au, snd
    audio/x-aiff Fichiers audio AIFF aif, aiff, aifc
    audio/x-wav Fichiers audio Wave wav
    image/gif Images gif man
    image/ief Images exchange format ief
    image/jpeg Images Jpeg jpg, jpeg, jpe
    image/tiff Images Tiff tif, tiff
    image/x-cmu-raster Raster cmu cmu
    image/x-portable-anymap Fichiers Anymap PBM pnm
    image/x-portable-bitmap Fichiers Bitmap PBM pbm
    image/x-portable-graymap Fichiers Graymap PBM pgm
    image/x-portable-pixmap Fichiers Pixmap PBM ppm
    image/x-rgb Image RGB rgb
    image/x-xbitmap Images Bitmap X xbm
    image/x-xpixmap Images Pixmap X xpm
    image/x-xwindowdump Images dump X Window man
    multipart/x-zip Fichiers archive zip zip
    multipart/x-gzip Fichiers archive GNU zip gz, gzip
    text/html Fichiers HTML htm, html
    text/plain Fichiers texte sans mise en forme txt, g, h, c, cc, hh, m, f90
    text/richtext Fichiers texte enrichis rtx
    text/tab-separated-value Fichiers texte avec séparation des valeurs tsv
    text/x-setext Fichiers texte Struct etx
    video/mpeg Vidéos MPEG mpeg, mpg, mpe
    video/quicktime Vidéos QuickTime qt, mov
    video/msvideo Vidéos Microsoft Windows avi
    video/x-sgi-movie Vidéos MoviePlayer movie
    htaccess apache rewriting © BMX - - 18:26:39@397 - - *DL*
    Ben µBlog Forum Book - Cache 2007 Sex Allopass