Chinese (People's Republic of China)  English  Français


Supinfo-Projects.com
所有Supinfo学生项目



项目
  最新项目
  项目排行
  所有项目

171 在线访问者
3168 项目


My Supinfo-Projects

   登录
   注册


概要

   714 访问
   访问者评分 : 16
    (5 选举)
   625 评注

   查阅文章

评估这篇文章

20
18
16
14
12
10
8
6
4
2
0


评论这篇文章

作者 :

电子邮件 :

你的评论 :



 
2004 - Note de Synthèse Stage
expressions régulières et web
[30 mn 阅读 - 发表时间 10/31/2003 - 对象 : Débutant]

作者

baraul_aAlexandre BARAULT
学生-工程师 Supinfo Paris
SUPINFO毕业年届 2006

   给他/她写信
   该作者所有项目
   作者简历

. Apache : UrlRewriting et les .htaccess

Les fichiers .htaccess permettent la réécriture "a voléé des url". Le mod_rewrite est présenté sur le site d'apache comme le couteau suisse de la manipulation d'url. Dans notre cas, j'ai installé apache2/mysql/php sur une machine windowsXP. De plus dans le fichier httpd.conf, j'ai modifié une ligne. Il suffit de décommenter cette ligne LoadModule rewrite_module modules/mod_rewrite.so Ensuite, vous n'avez qu'à redémarrer Apache et les modifications seront prises en compte.  

2.1 Tester si le mod_rewrite est actif :

  • Créer un fichier nommé error.php
  • Ensuite, il faut créer un fichier .htaccess à la racine de votre serveur web
  • < DEBUT du ficher .htaccess >
    RewriteEngine on
    RewriteRule ^([[:alnum:]])*\.html$ /error.php [L] //celle-ci permet de faire le test
    ErrorDocument 404 http://ddoc.no-ip.com/error.php
    //les suivantes permettent de remplacer les pages par defaut d'ie. ErrorDocument 500 http://ddoc.no-ip.com/error.php
    ErrorDocument 401 http://ddoc.no-ip.com/error.php
    ErrorDocument 404 http://ddoc.no-ip.com/error.php
    ErrorDocument 403 http://ddoc.no-ip.com/error.php
    Options -Indexes
    Options +FollowSymlinks
    < FIN du ficher .htaccess >
  • Si la page renvoyée est différente de error.php, vous pouvez vous dire que mod_rewrite n'est pas actif. Autrement ceci fonctionne.

 

2.2 Informations complémentaires sur les codes d'erreur http

  • 301 : document déplacé de façon permanente
  • A302 : document déplacé de façon Temporaire
  • 400 : erreur de syntaxe dans l'adresse du document :
  • 401 : Pas d'autorisation d'accès au document
  • 402 : accès au document soumis au paiement
  • 403 : pas d'autorisation d'accès au serveur
  • 404 : la page demandée n'existe pas
  • 405 : Méthode de requête du formulaire non autorisée
  • 406 : requête non acceptée par le serveur
  • 407 : autorisation du proxy nécessaire
  • 408 : temps d'accès à la page demandée expiré
  • 500 : erreur interne du serveur
  • 501 : requête faite au serveur non supprimée
  • 502 : mauvaise passerelle d'accès
  • 503 : service non disponible
  • 504 : temps d'accès à la passerelle expiré

Le [L] est un flag qui signifie que cette règle est la dernière à apppliquer dans ce cas. Les réécritures d'url sont le plus souvent utilisées pour présenter aux visiteurs une url plus simple à mémoriser et pour permettre une meilleure indexation des robots. Cette indexation permet d'optimiser votre traffic.
 

2.3 Témoignage

Voici le témoignage d'une personne sur l'avant et l'après url_rewriting :
"Boujours à tous
Je parle de mon experience: j'ai une base de données de quelques 1200 articles. Le site ( cartouche.biz ) en php avait juste une dizaine de pages indexée, en fait les pages statiques. Grace à l'url rewriting on est a réussi a indexer pratiquement toutes les pages du site, et les dernieres vont bientot venir, à voir l'activité des robots. Il ne s'agit pas de spam dans la mesure ou chaque page a un contenu unique c'est à dire un type d'imprimante et un type de cartouche. Et nous avons doublé en quelques semaines la fréquentation du site, parce que les visiteurs trouvent precisement ce qu'ils cherchent quand il font une requettAe détaillée marque / imprimante. Concernant le ralentissement du serveur il n'y en a pas eu ! Un webmaster heureux JPS".

 

2.4 Exemples

un autre exemple de l'utilisation de l'url rewriting, c'est lors de l'hébergement web. Sous Apache, le fait d'associer un /home/user à un site web crée par defaut un /~user. Cette forme d'écriture est peu habituelle , ainsi en créant une règle dans le .htaccess, on peut remédier à ceci. Au lieu de http://www.multimania.com/~toto/index.php, on aura http://www.multimania.com/toto/index.php. Le site d'apache propose ceci comme solution
  • RewriteRule ^/~([^/]+)/?(.*) /u/$1/$2 [R]
  • RewriteRule ^/([uge])/([^/]+)$ /$1/$2/ [R]

Un problème que peut rencontrer les webmasters, est l'utilisation du slash. C'est à dire que votre url peut demander /~quux/foo et le serveur peut croire que vous demandez un fichier or c'est un dossier. Par conséquent il faut que le serveur rajoute un / à la fin. Pour cela, il suffit simplement de réécrire l'url.
  • RewriteEngine on
  • RewriteBase /~quux/
  • RewriteRule ^foo$ foo/ [R]

Autre utilisation possible : l'utilisation de répertoire utilisateur situé sur un autre serveur.
  • RewriteEngine on
  • RewriteRule ^/~(.+) http://newserver/~$1 [R,L]
 

2.5 L'utilisation des conditions

Vous pouvez être amener à refuser des utilisateurs d'un domaine, refuser que certains robots ou aspirateurs parcourent les pages de votre site, pour cela les conditions ont été créé pour répondre à ces attentes.
Exemple 1 : Bannir des personnes provenant de tel domaine.
RewriteCond %(HTTP_REFERER) ^http://(www.)?domaine_a_bannir.com RewriteRule .* http://www.google.fr [L]
La notion de %(HTTP_REFERER) est appelé un masque. Voici les plus importants : %(HTTP_USER_AAGENT) qui identifie sur le navigateur et le système d'exploitation. %(HTTP_REFERER) qui indique la dernière page visitée. %(HTTP_HOST) qui donne le nom de domaine. %(REQUEST_FILENAME) informe sur la page demandée. %(REMOTE_ADDR), qui nous donne l'adesse ip du client.

 

2.6 Cas concret dans un site web


De plus ce principe d'utilisation de l'url rewriting permet de renforcer la sécurité. Par exemple, vous possédez un site contenant un index.php possédant un switch avec des includes en fonction d'une variable page. Votre url se présente de la forme http://www.monsite.com/index.php?page=acceuil se qui peut représenter un danger potentiel dans le cas où le programmeur ayant fait un travail approximatif, n'a pas gérer le default du switch. Par conséquent en faisant http://www.monsite.com/index.php?page=/etc:passwd, on pourrait afficher le contenu de /etc/passwd. Le module permet de changer cette url en http://www.monsite.com/index-acceuil.html ainsi on ne sait pas quelle variable modifiée. Par contre Apache se charge au niveau du serveur de remplacer cette url par la véritable, permettant ainsi l'interprétation correcte. Un autre avantage dans notre cas est l'indexation dans les moteurs de recherche. Supposons que notre page se nommait http://www.monsite.com/index-regex.html, si un internantes recherche dans google un document sur les expressions régulières, nous avons de fortes chances d'être présent dans les 3 premières pages des résultats. La tendance actuelle est à modifier son site pour l'adapter à ce module qui, nous pouvons le dire est le véritable couteau suisse pour les webmasters. Adapter son site à ce module est devenu une véritable priorité, pour la seule raison que les url comportant des ? avec plus de deux paramètres ne sont pas indexés sauf dans le cas de google, par conséquent les autres moteurs étant moins performants, on peut se demander si oui ou non nos pages contenant un ? sont indexés. Par exemple, dans mon site web j'utilise notamment cette rèAgle : RewriteRule ^astuces\-([[:alpha:]]+)\.html$ /index.php?page=astuces&traitement=$1 [L]

Petite note concenant le référencement : Comme nous avons pu le constater, il est possible de générer plus de traffic en utilisant ce module, cependant concernant cette volonté d'augmentation du traffic, certaines règles sont à respester:
  • Analyser son traffic
  • Achats de mots-cles auprès de moteur de recherche
  • Limiter au maximum les départs de visiteurs suites à des echecs de connexion
  • Obtenir des liens externes pointant vers son site
  • A eviter : participation à des webrings, échanges de bannières ou des programmes d'échanges de liens, pour la simple raison que vous courrez le risque d'être bannis de l'index de google.

 La notion de mise en cache Comme on dit, il fallait y penser :-D. Chaque fois qu'un client demande la page d'acceuil index.php, le serveur se charge de vérifier si il existe une version de index.cache.html, si oui il renvoie celle-ci au navigateur autrement il regénère la page php. Pour regénérer le cache, il suffit d'établir une tache programmée qui lancera un script php. Cette notion est parfaitement bien abordé dans http://www.expreg.com/rewrite.php.

Exercice pratique:
Vous possédez apache et souhaitez parser les logs ne ne récupérant que les adresses ip, les logs sous apache se présentent de cette manière 193.253.33.10 - ddoc [15/Oct/2003:11:17:14 +0200] "GET /images/title.gif HTTP/1.1" 200 22480.

$result="80.50.51.102 - sa [15/Oct/2003:12:57:54 +0200] "OPTIONS / HTTP/1.1" 401 492 ";
$motif='`([0-9]+[./-]?){1,4}+`';
preg_match_all($motif,$result,$out);
$nb=count($out[0]);
$test='`(.{1,4}\.+.{1,4}\.+.{1,4}\.+.{1,4}$)`';
for($i=0;$i<$nb;$i++){
$int=preg_match_all($test,$out[0][$i],$detail);
if($int==1)
echo $detail[0][0].'
';
}

Ceci vous permet de récupérer que les ip et de les rentrer dans une base de données sql, à partir de ce petit exercice, nous pouvons envisager de récupérer que les lignes où nous retrouvons - sa, ceci signifie qu'une personne alignà tenter de rentrer dans votre partie sécurisée par votre fichier .htaccess. Nous pouvons aller plus loin et logguer le nom de domaine de la machine distante de manière à refuser l'accès à notre domaine sécurisé. Ma dernière version du script est celle-ci :
echo"<hr>";
echo"<hr>";

$fichier = "C:\apache\Apache2\logs\access.log";
// Ouverture du fichier
$fp = fopen($fichier, "r");
if (!$fp) die("Impossible d'ouvrir le fichier de log");
// Lecture ligne par ligne
echo"<table>";
while ($result = fgets($fp, 1024)) {
//[15/Oct/2003:12:57:42 +0200]
if(!eregi("ddoc",$result)){
$motif='`([0-9]+[./-]?){1,4}+\s+(\-+\s+(^\-?|[[:alpha:]]+))`';
preg_match_all($motif,$result,$out);
$nb=count($out[0]);
for($i=0;$i<$nb;$i++){
if(eregi("(([0-9]+[./-]?){1,4})",$out[0][0],$regs)){
echo"<tr>";
echo"<td width=\"200\">".$regs[1]."</td>";
}
if(eregi("(\-+\s+^\-?|[[:alpha:]]+)",$out[0][0],$regg)){
echo"<td>".$regg[1]."</td>";
echo"</tr>";
}

}
}

}
echo"</table>";
echo"<hr>";
echo"<hr>";


 

2.7 Inconvenients de cette méthode

Le seul inconvénient à ce jour est le fait que l'on doive réécrire une partie du code source. Toute la partie lien est à modifier. De plus, je vous conseille de mettre en commentaire le lien que vous avez modifié, pour la seule raison qu'il vous faut penser au futur. De plus lors du développement, ceci ne peut que vous faire gagner du temps. Je conseillerais aux personnes de coder sans appliquer l'url rewriting , c'est à dire que vous mettez la ligne en commentaires et ensuite une fois que vous êtes sûre que votre site fonctionne, vous décommentez la ligne url de type url rewriting et vous commentez la précédente.



Articles de la même catégorie

 Pages : Top


565 访问
0 评注
Développer avec PHP et MySQL
[15 分钟阅读时间 - 公布时间 10/31/2003 - 对象 : Débutant]

更多


1062 访问
0 评注
De l'application .NET au logiciel professionnel
[40 分钟阅读时间 - 公布时间 10/31/2003 - 对象 : Débutant]

更多


915 访问
0 评注
Suivi de calculs et programmation réseau
[25 分钟阅读时间 - 公布时间 10/31/2003 - 对象 : Débutant]

更多

Powered by Campus-Booster Technology
Conditions d'utilisation & Copyright | Respect de la vie privée
© Copyright 1965-2006 Supinfo Paris, Paris Academy of Computer Science
Supinfo, Ecole Supérieure d'Informatique et Paris Academy Of Computer Science are trade marks.
23, rue de Château LANDON - 75010 PARIS - Phone : +33 (0) 153359 700 Fax : +33 (0) 153359 701

Web site autided by :