Vers un set de regles ultime pour script php ...

WRInaute discret
La dernière version de la méthode est donnée dans un message plus bas publié le: Sam Nov 29, 2003 1:25

en ce qui concerne la réécriture pour tous les sites php qui se passent des arguments dans l'adresse, et à la lecture des forums, j'ai donc adopté du code non spécifique ci-dessous.

Code:
Options +FollowSymlinks
RewriteEngine on
RewriteRule ^(.+).htm$ $1.html
RewriteRule ^(.+)-(.+)-(.*)-(.+)-(.*)-(.+)-(.*)-(.+)-(.*)-(.+)-(.*)-(.+)-(.*)-(.+)-(.*).html /$1.php?$2=$3&$4=$5&$6=$7&$8=$9&$10=$11&$12=$13&$14=$15
RewriteRule ^(.+)-(.+)-(.*)-(.+)-(.*)-(.+)-(.*)-(.+)-(.*)-(.+)-(.*)-(.+)-(.*).html /$1.php?$2=$3&$4=$5&$6=$7&$8=$9&$10=$11&$12=$13
RewriteRule ^(.+)-(.+)-(.*)-(.+)-(.*)-(.+)-(.*)-(.+)-(.*)-(.+)-(.*).html /$1.php?$2=$3&$4=$5&$6=$7&$8=$9&$10=$11
RewriteRule ^(.+)-(.+)-(.*)-(.+)-(.*)-(.+)-(.*)-(.+)-(.*).html /$1.php?$2=$3&$4=$5&$6=$7&$8=$9
RewriteRule ^(.+)-(.+)-(.*)-(.+)-(.*)-(.+)-(.*).html $1.php?$2=$3&$4=$5&$6=$7
RewriteRule ^(.+)-(.+)-(.*)-(.+)-(.*).html /$1.php?$2=$3&$4=$5
RewriteRule ^(.+)-(.+)-(.*)\.html /$1.php?$2=$3
en pratique et par l'exemple, une page :
Code:
-http://monsite.com/mondirectory/modules-op-modload-name-PNphpBB2-file-index.html
sera transformé en
Code:
-http://monsite.com/mondirectory/modules.php?op=modload&name=PNphpBB2&file=index
2 problemes:

- il semble que l'expression atteint ses limites vers la 10aine de variable :-(
Code:
$1.php?$2=$3&$4=$5&$6=$7&$8=$9  cad apres $10 $11 $12 $13
ca ne marche plus si il y a trop de parametres :(
Est-ce exact ? comment y remédier ?

- Est ce qqun a la fonction inverse avant d'envoyer une page au browser, il remplace toutes les url locales contenant des & et des ? et des = sous la forme corrrespondante ? Cela peut etre fait par une fonction PHP en s'inspirant du script google tap par exemple, qqun l'a deja fait de maniere générique sans spécifier les parametres?
et est ce que ca peut etre fait par apache pour etre plus rapide plutot que par php?

----
Dernieres petites questions: google n'a pas de pb avec les pages avec des noms tres longs du style
Code:
modules-op-modload-name-modules-op-modload-name-PNphpBB2-file-index.html
j'ai essayé au début un truc plus joli au lieu de:
Code:
-http://monsite.com/mondirectory/modules-op-modload-name-PNphpBB2-file-index.html
-http://monsite.com/mondirectory/modules-op-modload/name-PNphpBB2/file-index.html
mais avec les / il se perdait et ne savait plus ou il en etait avec les url relatives de la page.
Il a été dit que les _ sont à eviter car ils ne séparent pas des mots pour google. Alors mis à part / et - il y a d'autres caracteres qu'on peut utiliser ?
Ou peut etre que je fairais mieux d'utiliser _ pour que les mots cles qui figurent dans l'url et qui sont expressifs aient plus de poids dans l'url. Ce que je veux dire c'est que pour google:
Code:
-http://monsite-motclé.com/mondirectoryclé/modules-op-modload-name-PNphpBB2-file-index.html
les 2 mots clés utiles: mondirectoryclé et motclé ont une importance de 1/10 dans l'url. (il y a 10 mots dans l'url) alors que
Code:
-http://monsite-motclé.com/mondirectoryclé/modules_op_modload_name_PNphpBB2_file_index.html
ces memes mots clés utiles ont une importance 1/4 dans l'url et c'est donc mieux. Est ce que google travaille bien comme ca?
 
WRInaute passionné
salut sergi
je ne te répondrais que sur une question, mais correctement :wink:
Il y a deux choses dans ce que tu veux faire
il y a url qui sera affichée et qui sera très courte
discussion.html
et avec variable
discussion-1-3-5-8.html (par exemple)

et il y a le fichier physique avec le nom du fichier php, ses variables et son chemin d'accés.

Tu es d'accord qu'avec l'url rewrite tu peux faire pointer l'un sur l'autre
La structure de ton arborescence n'a pas a être affichée obligatoirement dans l'url


Pour le nombre de variables j'en utilise jusqu'à 5 sans problèmes, je n'ai pas d'expérience au delà

kmacleod
 
WRInaute discret
La structure de ton arborescence n'a pas a être affichée obligatoirement dans l'url
Je pense qu'il faut mettre un bemol la dessus.
si j'ai une page qui existe vraiment ainsi:
Code:
directory/fichier.html?variable=toto
et que dans ce fichier il y a un lien avec une url relative comme ceci:
Code:
<a href=page2.html>Un lien vers  la page 2</a>
( et non pas
Code:
<a href=http://site.com/page2.html>Un lien vers  la page 2</a>
)
Lorsque je click sur le lien avec mon browser, il va voir que je suis sur la page directory/fichier.html et en cliquant sur le lien j'accederais en fait à -http://site.com/directory/page2.html et non pas -http://site.com/page2.html

Mais avec l'url rewriting il faut faire attention.
si j'ai une regle d'url rewriting qui me permet d'acceder au fichier.html en écrivant l'url dans le browser: -http://site.com/lien.html alors en cliquant sur le lien de la page affichée, il cherchera la page -http://site.com/page2.html qui n'existe pas.

Bref, mieux vaut ne pas mettre de '/' dans les adresses pour faire passer les parametres.

Je crois que je vais pencher pour une alternance de '-' et de '_' car mieux vaut ne pas utliser de '%' comme separateur qui pourrait faire partie d'une variable, ni de '/', je ne sais pas si google accept dans les noms de fichier les ',' '&','=','$'...
est ce que google accepte ceci:
-http://site.com/variable=132&variable2=687.html
??????

PS: 5 variables ce n'est pas bcp, $1 $2 $3 $4 $5 en fait moi comme tu as vu, j'ai le nom des parametre et leur valeur, ansi que le nom de la page qui doivent faire partie de l'expression réguliere, et meme avec 5 variables php ca fait donc 11 champs distincts dans l'expression réguliere et c'est deja au dessus de la limite !
 
WRInaute discret
Voici quelques url longues que j'ai trouvé dans l'index de google.
pour voir comment s'est fait.

http://www.mirror.co.uk/news/allnews/co ... _page.html

http://www.nolo.com/lawcenter/ency/arti ... 540CC4CB1E

http://iccoventry.icnetwork.co.uk/0100n ... _page.html

http://www.masternewmedia.org/2003/04/3 ... eserve.htm


Et en voici une qui n'est pas ds l'index google, mais son format doit etre ok vu que c'est du google :)
https://www.google.com/search?num=100&hl ... gle+Search

Il semble donc que la meilleur solution soit -http://monsite.com/page?variable=parametre&var2=par2.php ...

Tiens, il faudrait faire un concours dans un autre fil de discussion, à celui qui trouve l'url la plus longue dans l'index de google ! si ca n'existe pas deja qqpart..
 
Olivier Duffez (admin)
Membre du personnel
quand tu écris des exemples avec monsite.com, peux-tu éviter de créer des URL cliquables ? ajoute un tiret devant par exemple
et utilise le style "Code" pour le code comme celui tapé dans le .htaccess
Merci !
 
WRInaute discret
Ok chef.

Bon que pensez-vous de la regle universelle:

Code:
RewriteRule ^(.+).php.(.+).html $1.php?$2
qui transforme

1: -http://monsite.com/dir/modules.php.var1=par2&var3=par4&var5=par6&var7=par8.html
en
2: -http://monsite.com/dir/modules.php?var1=par2&var3=par4&var5=par6&var7=par8

J'ai l'impression que la version 1: devrait etre indexée par google ...
 
WRInaute discret
Voila le resultat de mon étude de regles universelles tres simples:

qui transforme les url page.php?var=param en page.php.var=param.html
avec autant de parametres qu'on veut, et qui devrait etre indexable par google.

Dans le .htaccess:
Code:
Options +FollowSymlinks
RewriteEngine on 
RewriteRule ^(.+)\.php\.(.+)\.html $1.php?$2

et dans les pages php tout au début (au debut de header.php pour les post/php-nuke user):

Code:
<?php
ob_start();
?>

et dans les pages php tout à la fin (à la fin de footer.php pour les post/php-nuke user):

Code:
<?PHP //URL rewriting modifyed by sergi
$contents = ob_get_contents(); // store buffer in $contents
ob_end_clean(); // delete output buffer and stop buffering
echo preg_replace("(\.php\?([-a-zA-Z0-9\.\%\?=\+_@\&\.,;:]+))", ".php.\\1.html", $contents);
?>

et c'est tout ce qu'il y a à faire !!!

Qu'en pensez-vous ?

--------
- Il y a encore un petit truc à regler: il ne faut pas ré-écrire les liens des pages php vers des sites exterieurs qui sont sous la forme php?var ... si qqun se sent le courage de modifier ca...[/b]
 
WRInaute discret
En tout cas ca marche, googlebot vient de voir une telle page qui avait 7 parametres en php sans broncher... yahoo !
Bon prochaine étape inclure un petit dictionnaire de correspondance pour remplacer certains noms de variable qui reviennent souvent et peu explicite comme modules, op, num,name... par une liste de keyword... puis reciproquement...
Et tout ca grace à webrankinfo !
 
WRInaute discret
remarque j'ai un doute, a chaque fois, robotstats me dit qu'il y a un code http 200 associé à ces pages.... c'est quoi ca un code http 200 ? :?
 
WRInaute discret
Ah quel soulagement ! mais du coup j'ai des pages sans code http du tout, mais bon je ne m'inquiete pas. Bon et bien j'ai réussi à prendre le deepcrawl en route ! ouf :)
 
WRInaute discret
Juste pour confirmer que ca y est! mes pages sont dans l'index de google avec la mehode que j'ai donné plus hait.

donc les pages indexees par google sont de la forme:

-http://www.monsite.com/directory/module.php.op=mod-load&name=phpBB&file=groupep&sid=bfe718798cf70c1838db55f842fb2d8c.html

ou encore unpeu différent:

- www.tagws.co.yu/html/ modules.php-op=modload&name=Recommend_Us&file=index.htm

Reste plus qu'a ne pas faire de réécriture pour les url absolue...
 
WRInaute discret
Dans le .htaccess:


Code:

Options +FollowSymlinks
RewriteEngine on
RewriteRule ^(.+)\.php\.(.+)\.html $1.php?$2


et dans les pages php tout au début (au debut de header.php pour les post/php-nuke user):

Code:


<?php
ob_start();
?>



et dans les pages php tout à la fin (à la fin de footer.php pour les post/php-nuke user):



Code:


<?PHP //URL rewriting modifyed by sergi
$contents = ob_get_contents();
ob_end_clean();
echo preg_replace("(([=\"\' ]+[-a-zA-Z0-9\.\%\?=\+_@\&\.,;/]+)(\.php\?([-a-zA-Z0-9\.\%\?=\+_@\&\.,;:]+)))", "\\1.php.\\3.html", $contents);

?>



et c'est tout ce qu'il y a à faire !!!

Voila en rouge la nouvelle ligne qui remplace l'ancienne pour ne faire de ré-écriture que sur les url relatives, et pas absolue. comme ca, ca semble marché impecable. PS ceux qui ont peur de ralentire le site peuvent imbriquer les 2 bouts de codes php par un
if (client is not windows) { }
comme ca il n'y a que pour quelques rares visites (non windows) qui seraient ralenties. mais a vue de nez, moi j'ai pas noté de ralentissement.[/b]
 
Discussions similaires
Haut