| My Supinfo-Projects |
登录
注册
|
|
 |
 |
 |
 |
|
|
| 2004 - Note de Synthèse Stage |
expressions régulières et web
[30 mn 阅读 - 发表时间 10/31/2003 - 对象 : Débutant]
|
   
|
作者
. 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.
- 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.
- 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.
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".
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]
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 : BR>
%(HTTP_USER_AAGENT) qui identifie sur le navigateur et le système d'exploitation. BR>
%(HTTP_REFERER) qui indique la dernière page visitée. BR>
%(HTTP_HOST) qui donne le nom de domaine. BR>
%(REQUEST_FILENAME) informe sur la page demandée. BR>
%(REMOTE_ADDR), qui nous donne l'adesse ip du client. BR>
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>";
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 |
|
|
|
 |
 |
 |
 |
|