PhpBB & URL rewrting: LA solution simple

WRInaute discret
Voilà j'avais pas envie de me crever à modifier pleins de fichiers, et je me suis construit ma ptite solution perso pour réécrire toutes les urls de mon forum, et il n'y a que deux fichiers à modifier: includes/sessions.php (:roll:) et le .htaccess bien entendu. Vous l'aurez deviné: c'est très bourrin :roll:

Ce système ne pose aucun problème avec le panneau d'administration
(les urls sont modifiées aussi, mais l'.htaccess reformera le bon nom de fichier ensuite :-))
Temps d'installation: ~2 minutes

Il est conseillé d'installer le mod qui désactive les sessions pour les inivités, vous pourrez le trouver ici (laissez sessions.php ouvert après l'avoir installé ;-) Vous pouvez installer ce mod-là et celui-ci dans l'ordre que vous voulez.)

Pour commencer, les modifs:
Ouvrir includes/sessions.php
Trouver
Code:
function append_sid($url, $non_html_amp = false)
{
	global $SID, $phpEx;
ajouter après
Code:
	if(strpos($url, '#')){
		$url2 = explode('#', $url);
		$url = $url2[0];
		$url2[1] = '#' . $url2[1];
	} else {
		$url2 = array($url,'');
	}
Trouver
Code:
if ( !empty($SID) && !preg_match('#sid=#', $url) )
Remplacer par
Code:
if ( !empty($SID) && !preg_match('#sid__#', $url) )
Trouver
Code:
	return($url);
}

?>
Ajouter avant
Code:
	$url = str_replace(array('?','&', '&', '=', '.'.$phpEx), array('.', '-', '-', '__', ''), $url);
	$url.= '.html' . $url2[1]

Ouvrir /.htaccess:
Code:
RewriteEngine on
RewriteRule ^([^\.]+)\.html$  $1.php  [L]
RewriteRule ^([^\.]+)\.([^_\-]+|[^_\-]+_[^_\-]+)__([^\-]*)\.html$  $1.php?$2=$3&  [L,qsa]
RewriteRule ^([^\.]+)\.([^_\-]+|[^_\-]+_[^_\-]+)__([^\-]*)-(.+)\.html$  $1.$4.html?$2=$3& [n,qsa]
(jolis hein mes p'tis chinois ? :lol:)

Bref: append_sid() prend l'url donnée, ajoute un sid si nécessaire, lui supprime l'extension .php, lui remplace le "?" par un ".", les "&" par des "-" et les "=" par des "__" (fallait faire gaffe aux search_id :roll:)

Par exemple:
Code:
http://www.notredomaine.net/memberlist.php?mode=posts&order=DESC&start=50
Devient
Code:
http://www.notredomaine.net/memberlist.mode__posts-order__DESC-start__50.html
Facile hein ?

Oui mais cette solution va aussi ajouter dans l'url "-sid__id_de_la_session", et du coup, on a la "faille" sid dont j'ai lu quelques infos à ce propos... c'est vraiment grave docteur ?

Bon en fait je m'apperçois qu'il y a longtemps, j'avais modifié append_sid(), pour contenter google et un autre bot, de la façon suivante:
Code:
 	global $SID, $HTTP_SERVER_VARS, $phpEx;

	if ( !empty($SID) && !eregi('sid=', $url) && !strstr($HTTP_SERVER_VARS['HTTP_USER_AGENT'] ,'Googlebot') && !strstr($HTTP_SERVER_VARS['HTTP_USER_AGENT'] ,'slurp@inktomi.com;')) 
	{
		$url .= ( ( strpos($url, '?') != false ) ?  ( ( $non_html_amp ) ? '&' : '&' ) : '?' ) . $SID;
	}

...
(tiens, un truc à modifier là, avec mon système: plus bon le 'sid='...)
Donc ça fachera pas trop google (par contre la table des sessions elle doit s'en prendre un coup quand google passe: à chaque page vu une nouvelle est créée logiquement :shock: je me demande quel est le pire :?)

Semi-autre question:
Dans phpbb, un message est accessible de deux façons: soit son id de message, soit l'id du sujet et la page du message. Sachant qu'il y a x messages par page de sujet aximum, cela fait que google doit indexer x+1 fois la même page, je me trompe ? Mauvais ça si on veut pas se faire blacklisté :? Et impossible de faire de l'url rewriting avec ma solution...

Solution possible: la page qui renvoie le plus à des viewtopic.php?p=message_id, c'est search.php (?search_id=unanswered surtout pour les bots...) vous croyez qu'on meta robots noindex,nofollow serait suffisant ?
 
WRInaute occasionnel
Salut Lord Farquaad et bienvenue sur WRI,

pour le pb d'url rewrite je peux pas d'aider la mais pour la faille php je peux, voici un article sur cette faille: http://www.phpsecure.info/v2/.php?zone=pComment&d=1057322922 ne sont concerne que les versions inferieur a la 4.3.2(ca doit etre une minorite de personne), et meme pour ceux-la il y a une parade si vous avez acces a votre php.ini Plus de details dans l'article.

voila donc pas de panique c'est raisorbable.

@+
David
 
WRInaute discret
Merci pour la bienvenue ;-)

Non si j'ai bien compris, la "faille" sid quand on parle d'URL rewriting c'est que le sid soit compris dans l'adresse de la page, et comme les moteurs de recherches utilisent souvent plusieurs bots simultanément pour visiter les pages, chaque bot obtient un sid différent, et du coup il visite les mêmes pages que tous les autres en croyant que les urls sont différentes, donc il visite toutes les pages...

Logiquement ceci ne se produit qui lorsque les bots ont chacun leur propre adresse IP, puisque sinon le premier bot visite l'index, obtient des urls avec un même sid et communique ces urls aux autres bots afin de commencer l'indexage... enfin, je suppose que c'est comme ça du moins :roll:

L'inconvéniant c'est que si on laisse un visiteur se promener sans sid, à chaque page il en obtiendra un nouveau, qui sera stocké dans la table des sessions, et ça va faire beaucoup s'il visite tout !

Je vais essayer de trouver une modification correcte de session.php pour éviter ce problème, afin que les bots n'aient pas besoin de sid...
 
WRInaute occasionnel
On doit pas parler de la meme faille, moi je parlais d'une faille qui permet d'injecter du code javascript ds les sid ce qui permet par exemple a un utilisateur mal intentionne de detourner des mots de passe etc....
Toi ds ton cas il faudrait mieux que les bots n'est pas de sid attribue ainsi ca t'eviterai de surcharger ta base
 
WRInaute discret
Ben ouais... j'attends l'avis des autres parce que j'aimerais savoir combien de sid différents auraient les bots si je leur en donne un...

Et puis j'aimerais leur avis sur tout le reste de ce que j'ai dit aussi ;-)
 
WRInaute discret
TOP ! ;-)

Bah ça fait presque 4 jours que j'ai posté ce sujet tout de même ;-) et toujours pas d'avis sur ma technique :cry:

Au fait j'ai remarqué que mon session.php avait été plus modifié que ce que je ne l'avais dit pour google (ça fait longtemps, je ne m'en souvenais plus...), et donc qu'il n'y avait qu'une seule session utilisée pour googlebot :-)

Enfin, je compte quand même faire un système qui gèrera tous les bots que l'on veut, en faisant confiance à l'ip et non au user agent :roll:
 
WRInaute discret
J'ai trouvé un bug dans mon fichier sessions.php, j'ai fait la correction et j'ai édité mon premier message ;-)

Sachez que se bug est présent aussi sur le forum de WRI, pour le voir il faut désactiver les cookies puis aller sur l'index du forum, et dans la colonne "derniers messages", regarder le lien qui mène vers le dernier message du dernier sujet, il y a un problème avec le "#" ;-) et si on suit le lien on obtient un nouveau sid :roll:

Edit: apparemment un vieu bug de phpBB d'ailleurs, il était déjà corrigé dans la 2.0.6...

Au fait, ce post serait peut-être mieux dans "Tests et étude de cas" ? Aucune idée... enfin pour moi ce qui compte c'est d'avoir votre avis ;-)
 
WRInaute impliqué
Je trouve ta technique très bonne :)
Elle fonctionne surement très bien avec un phpbb de base , mais cela doit poser plus de problèmes avec un phpbb moddé . De nombreux mods ne suivent pas les standards qui veulent que l'on utilise append_sid() pour tous les liens vers le forum : dans ces cas là ta modif ne fonctionne pas .
Pas trop d'importance à mon avis , puisque le sid n'est pas généré dans ce cas ....

Semi-autre question:
Dans phpbb, un message est accessible de deux façons: soit son id de message, soit l'id du sujet et la page du message. Sachant qu'il y a x messages par page de sujet aximum, cela fait que google doit indexer x+1 fois la même page, je me trompe ? Mauvais ça si on veut pas se faire blacklisté Et impossible de faire de l'url rewriting avec ma solution...
Sans compter la possibilité next/previous dans les posts et les topics . Sur un phpbb de base , il y a 6 url différentes pour un post , plus les possiblités de tri , et l'option "voir dernier post" , caractérisée par le paramère ( p=post#post ) .
Et pourtant les forums phpbb sont référencées dans Google , il ne sont pas blacklistés , alors que phpb.com compte plus de 100.000 pages référencés pour son forum , incluant ses différentes URL .
Pas d'inquiétude pour ma part à ce niveau .
J'utilise l'URL rewriting , ce qui porte vers les 15 les url différentes amenant au même sujet , et pour l'instant ( même si je m'inquiète un peu ) , aucun problème de "duplicate content" .

Logiquement ceci ne se produit qui lorsque les bots ont chacun leur propre adresse IP, puisque sinon le premier bot visite l'index, obtient des urls avec un même sid et communique ces urls aux autres bots afin de commencer l'indexage... enfin, je suppose que c'est comme ça du moins
C'est pour ça que j'utilise ce mod : http://www.phpbb.com/phpBB/viewtopic.php?t=185839
Il régle aussi d'autres problèmes liés au référencement .
 
WRInaute discret
Si tu dis qu'indexer plusieurs fois la même page ne pose pas de problème, alors c'est nickel :P

Au fait: les boutons précédents et suivant ne génèrent pas de nouvelles urls dans phpBB (à moins que ça ait changé dans les dernières versions ? :?) Par contre il y a aussi les postorder, le postdays etc. :roll:

Merci pour le mod que tu proposes, je vais installer ça directement arès avoir comparé mon sessions.php avec celui de la 2.0.8 (ce doit être un des fichiers qui a le moins varié au cours des versions, mais je l'ai ptet moddé... déjà j'ai le truc pour google...)

Au fait Doc, sur phpBB-fr je "Le nain connu" (on peut pas changer de pseudo :roll:) mais bon, je n'y vais que très rarement parce que j'ai plus trop le temps...
 
WRInaute impliqué
Cela génère pas réellement de nouvelle url , puisque c'est un ajout de paramètres .
Néanmoins c'est une url différente .
A titre indicatif , voici les pages référencées sur phpbb.com pour le merveilleux mod ( :mrgreen: ) Rabbitoshi : https://www.google.fr/search?q=site:www. ... N&filter=0
65 résultats pour le même topic .
Plus amusant : https://www.google.fr/search?q=site:www. ... art=0&sa=N . 13 résultats pour la recherche du topic sur Google , incluant un view=previous .

Pour le topic d'ADR , 35 résultats : https://www.google.fr/search?q=site:www. ... art=0&sa=N
Pour les posts : 314 résultats : https://www.google.fr/search?hl=fr&ie=UT ... %7Clang_fr

Je ne m'inquiète pas trop donc .... Evidemment il faut voir que le forum de phpbb.Com a un PR de 9 , beaucoup de ces pages sont indéxées . Pour nous , il n'y aura jamais plus de 10 résultats ( URL rewrtiing compris ) pour un topic .

Au fait Doc, sur phpBB-fr je "Le nain connu" (on peut pas changer de pseudo ) mais bon, je n'y vais que très rarement parce que j'ai plus trop le temps...
Je t'ai reconnu , Lord Farquaad est le pseudo que tu utilises sur ton forum . Je le change sur phpbb-fr .
 
WRInaute discret
Pour les boutons précédents et suivants: ah oui tu parles de ceux pour voir les sujets suivants et précédents, mais ça ne mène que vers la première page du sujet, pas vers toutes les autres ;-)

Au fait t'as pas une explication pour le [N] dans mon .htaccess ? J'avais simulé le truc avec un [C] en php, et ça marchait sans problème avec 4 paramètres, pourtant là je suis obligé de mettre un [N] :? J'ai l'impression de ne pas bien comprendre le [C], cela signifie pourtant bien vérifier la condition et continuer le rewriting, en passant les [C] si rien n'a été modifié, non ? :?
Et question: qu'est-ce qui se passe s'il n'y a pas de flag ?

Merci pour le pseudo sur phpbb-fr :-) Je verrai ça la prochaine fois que j'irai (peut-être pas avant des mois :roll:)

Edit:
au fait, j'ai oublié de le dire mais mon système ne pose aucun problème avec le paneau d'administration !!!

Edit 2:
J'ai encore modifié ma fonction append_sid pour qu'elle évite les urls du genre
Code:
viewtopic.php?t=xy#xy&sid=add189efae1fe98da1d98fd
(dans les anciennes distributions de phpBB) et qui devenaient
Code:
viewtopic.t__xy#xy-sid__add189efae1fe98da1d98fd.html
avec la technique de départ et
Code:
viewtopic.t__xy.html#xy&sid=add189efae1fe98da1d98fd
avec la première correction.
Maintenant ça fera:
Code:
viewtopic.t__xy-sid__add189efae1fe98da1d98fd.html#xy
ce qui est correct ;-)

A noter que même dans la dernière version de phpBB, passer des urls contenant des '#' (indiquant où le navigateur doit se placer dans la page) à append_sid() est foireux... La correction que les programmeurs ont faite consistait à s'assurer qu'aucune '#' ne lui était passés... (problème lors des redirections du type viewtopic.php?t=xy&view=newest dans les anciennes distributions)

Edit 3: ah j'ai compris un peu mieux l'histoire du premier [N] qui ne marche pas si c'est [C], en fait je peux simplement enlever ce [N] :-), je vais vérifier...
 
WRInaute accro
heu vous êtes sur que ça ne pose pas de problème 6 pages référencées avec le même contenu ? Par ce que je commence à me poser des questions
 
WRInaute impliqué
Lord Farquaad a dit:
Edit 2:
J'ai encore modifié ma fonction append_sid pour qu'elle évite les urls du genre
Code:
viewtopic.php?t=xy#xy&sid=add189efae1fe98da1d98fd
(dans les anciennes distributions de phpBB) et qui devenaient
Code:
viewtopic.t__xy#xy-sid__add189efae1fe98da1d98fd.html
avec la technique de départ et
Code:
viewtopic.t__xy.html#xy&sid=add189efae1fe98da1d98fd
avec la première correction.
Maintenant ça fera:
Code:
viewtopic.t__xy-sid__add189efae1fe98da1d98fd.html#xy
ce qui est correct ;-)
Si les googlebots lisent ces pages , tu vas te retrouver avec plus de 1.000.000 différentes pour un même sujet ... Là ça doit être moins apprécié !
Même pour tes utilisateurs , il se pose le problème des liens faits dans les posts : les liens contenant un sid conduiront le plus souvent à une session invalide s'ils sont utlisés par d'autres personnes ou lors d'une session ultérieure .

A noter que même dans la dernière version de phpBB, passer des urls contenant des '#' (indiquant où le navigateur doit se placer dans la page) à append_sid() est foireux... La correction que les programmeurs ont faite consistait à s'assurer qu'aucune '#' ne lui était passés... (problème lors des redirections du type viewtopic.php?t=xy&view=newest dans les anciennes distributions)
Qu'est ce que tu entends par foireux ?
C'est entièrement fonctionnel tant quie #var est à la compète fin de l'url .
 
WRInaute discret
Pour les sid: en effet, ça j'avais bien compris, donc je conseille le mod que tu m'as proposé pour éviter que les invités aient un identifiant de session dans les urls ;-) Je l'ai d'ailleurs déjà installé :-).
Ce qui tombe bien, c'est qu'il modifie le même fichier que moi: sessions.php (logique :roll:)

J'entends par foireux la première URL que tu recopies dans la citation: normalement le sid est perdu de cette façon ! La fonction append_sid ne se soucie pas qu'il y ait des '#' dans les urls, or normalement Apache coupe les urls à partir de ce '#' (puisque ce sont des infos qui ne servent à rien...)

Tu n'as qu'à tester sur ce forum-ci: tu désactives les cookies, tu te reconnectes, tu te rends sur l'index et tu cliques sur le lien '>>' (dernier message) d'un forum... normalement tu seras déloggé :roll:
 
WRInaute discret
J'ai réussi à réduire de deux lignes le fichier htaccess, il est encore plus simple maintenant,et plus de petits -_- :roll:

Tout ça grâce à mon htaccess checker :lol:
 
WRInaute occasionnel
Tout cela a l'air bien pratique, mais je conseille aux gens que ça intéresse de vérifier que leur serveur accepte l'url rewriting.
Si vous vous en rendez compte après vous être tapé toutes les modifs, ça craint un peu... :roll:
 
WRInaute discret
snif j'y arrive pas a appliquer ta methode a chaque fois que j'essaye de rentrer dans un salon de mon forum il affiche l'adresse de la page sous la forme xxx1_10.html mais dit "page introuve http error 404"
 
WRInaute discret
ok mais pkoi il affiche pas la page? en fait j'ai remi une version qui marche dans l'htaccess y'avait
RewriteEngine on
RewriteRule ^([^\.]+)\.html$ $1.php [L]
RewriteRule ^([^\.]+)\.([^_\-]+|[^_\-]+_[^_\-]+)__([^\-]*)\.html$ $1.php?$2=$3& [L,qsa]
RewriteRule ^([^\.]+)\.([^_\-]+|[^_\-]+_[^_\-]+)__([^\-]*)-(.+)\.html$ $1.$4.html?$2=$3& [n,qsa]
 
WRInaute discret
par contre je n'ai pas la variable global $phpEx qui est presente dans la 1ere ligne de code à remplacer... Ce n'est pas grave?
 
Discussions similaires
Haut