Lerm-IT

Blog traitant de technologies informatiques. Logiciel libre, AdminSys, DevOps et GNU/Linux !

12 Jan 2009

[Apache2] Décomposition du résultat d'une regex

J’ai des utilisateurs que nous nommerons romain, tintin et milou. Ils ont chacun un dossier personnel du type : /home/“première lettre”/“première et deuxième lettre”/“nom”.

Exemple :

pour tintin
/home/t/ti/tintin Pour milou
/home/m/mi/milou

Dans leur dossier personnel ils ont un dossier public_html où ils peuvent mettre leur site web. Ce site web doit être accessible depuis l’URL du site global (celui que dont nous configurons le vhost actuellement) via le path ‘/username’.

Par exemple pour tintin

http://monsite.tld/tintin
Ce lien sert le dossier /home/t/ti/tintin

Mon but est de ne pas à avoir à créer un alias pour chacun d’eux. (Vous aurez reconnu mes aptitudes d’informaticien/de faignant !).

Dans les faits, ce post ne va pas vraiment traiter de comment décomposer le résultat d’une regex dans apache2 pour la simple et bonne raison que je n’ai pas trouvé comment faire et encore moins si c'était possible. Je vais donc plutôt vous parler de la méthode que j’ai employée pour contourner mon problème.

La première solution que j’ai trouvée est de faire un lien symbolique depuis le DocumentRoot d’apache vers le dossier de l’utilisateur. Mais ceci n’est pas ce que je cherchais, car il me faut toujours configurer ce lien à la main !

J’ai donc décidé d’utiliser la directive AliasMatch d’apache2 comme ceci.

 
AliasMatch "^/(.)(.)(.\*)/(.\*)" "/home/$1/$1$2/$1$2$3/public_html/$4"
AliasMatch "^/(.))(.*)" "/home/$1/$2/$1$2$3/public_html"

La deuxième ligne permet de rediriger l’utilisateur même s’il ne met pas le / après le nom. De cette façon je n’ai pas à traiter la chaine récupérée pour en extraire la première, puis la deuxième lettre mais simplement à concaténer les chaines récupérées.

Il vous faudra peut-être aussi revoir les droits de visibilité. Je vous laisse ce que j’ai fait mais ne m’y attarderai pas dessus.

 
<DirectoryMatch "^/home/(.)/(.){2}/(.*)/public_html/">
  Options Indexes MultiViews
  AllowOverride None
  Order allow,deny
  allow from all
</DirectoryMatch>

Toujours est-il que si quelqu’un sait s’il est possible, ou mieux, comment faire pour décomposer une chaine récupérée depuis AliasMatch je suis preneur !

Sur ce …