&mymail;"> ]> p4bl0's blog > Nouveautés sur le site

Nouveautés sur le site

Vous l'avez peut-être remarqué, il y a depuis quelques jours deux nouveautés sur le site. La première, c'est la nouvelle syntaxe de rédaction des commentaires. La seconde, c'est une nouvelle méthode d'url rewriting, sans le ? dans l'url.

La nouvelle syntaxe de rédaction des commentaires

Auparavant, la mise en forme du texte dans les commentaires se faisait avec des vielles balises html :
  • le texte entre <b> et </b> était en gras.
  • le texte entre <i> et </i> était en italique.
  • le texte entre <u> et </u> était souligné.
  • les adresses internet étaient automatiquement transformées en lien.
Ensuite mon script php transformait ça en xhtml 1.1 valide.

J'ai finalement décidé d'utiliser une autre syntaxe, que je trouve bien plus intuitive. C'est cette syntaxe que j'ai créé et que j'utilise pour rédiger les articles de ce blog. Je l'ai appeler pCode (p4bl0's Code).
Évidemment il y a beaucoup moins de possibilités pour vous dans les commentaires que pour moi dans les articles : pas besoin des listes, images, titres, codes, balises sémantiques etc... juste les mise en forme de base.
Voici la nouvelle syntaxe :
  • le texte entre deux ## et ## est en gras.
  • le texte entre // et // est en italique.
  • le texte entre __ et __ est souligné.
  • le texte entre -- et -- est barré.
  • les liens sont créés de la manière suivante : @[adresse-du-lien](texte du lien).
Comme vous pouvez le voir c'est une syntaxe bien plus évidente.
Par exemple le code suivant :
 → Code : exemple de pCode.
  1 
  2 
Le ##pCode## est un //langage de --programmation-- __mise en forme__// du texte. Il a été créé par @[http://p4bl0.net/](p4bl0) pour son site.
Donne le texte suivant :
Le pCode est un langage de programmation mise en forme du texte.
Il a été créé par p4bl0 pour son site.


La nouvelle méthode d'url rewriting

Pour ceux qui ne le savent pas, le mod_rewrite d'Apache n'est pas disponible chez Free. J'avais donc créé un système d'url rewriting via un script php. Le nouveau système l'url rewriting se fait toujours via un script php, mais je tire parti du MultiViews qui est disponible chez Free (et activé par défaut).
Pour ceux qui ne le savent pas, le MultiViews permet d'accéder à un fichier sans donner son extension. Par exemple pour afficher la page blog.php il suffit de taper blog. C'est très pratique, d'autant plus l'on peut ajouter un slash suivi de ce que l'on veut après le nom du fichier (avec ou sans son extension) et on arrive toujours sur la même page !
Toute les adresses suivantes pointent sur blog.php :
  • blog
  • blog/
  • blog/machin/
  • blog/machin/chose-bidule.truc
Et c'est maintenant que la magie de php opère, si il y a un slash après blog, une nouvelle variable d'environnement se créer : $_SERVER['PATH_INFO']. Devinez ce qu'elle contient (c'est duuuuur !) : tout ce qui est après le slash, le premier slash compris.
Du coup on peut facilement récupérer les infos présentent dans l'url !
Ensuite j'utilise la même méthode que précédemment, c'est a dire la fonction php explode('/', $_SERVER['PATH_INFO']); qui me permet d'avoir un tableau avec les données de l'url dedans. Je range ensuite ces données dans $_GET de manière à ce que comme avec du vrai url rewriting, on puisse accéder à la page de manière "normal" (avec blog.php?arg=valeur).
Voici le bout de code placé en haut blog.php :
 → Code : url rewriting via php
  1 
  2 
  3 
  4 
  5 
  6 
  7 
  8 
  9 
if (isset($_SERVER['PATH_INFO'])) { $arg = explode('/', $_SERVER['PATH_INFO']); if (isset($arg[1]) && !empty($arg[1]) && isset($arg[2]) && !empty($arg[2])) { $_GET[$arg[1]] = (substr($arg[2],-5)=='.html') ? substr($arg[2],0,-5) : $arg[2]; } if (isset($arg[3]) && !empty($arg[3]) && isset($arg[4]) && !empty($arg[4])) { $_GET[$arg[3]] = (substr($arg[4],-5)=='.html') ? substr($arg[4],0,-5) : $arg[4]; } }
Avec ça quand votre navigateur pointe sur blog/post/Nouveautes-sur-le-site.html c'est la même chose que lorsqu'il pointe sur blog.php?post=Nouveautes-sur-le-site.
Ou encore blog/tag/politique/page/2.html est la même chose que blog.php?tag=politique&page=2.

Quelque chose de très important : la balise base est obligatoire dans la partie head de vos pages. En effet le navigateur croit vraiment être dans le dossier /blog/tag/politique/page/, donc par exemple si vous tentez d'afficher une image avec le chemin relatif mes_images/mon-images.png le navigateur ira la chercher dans le dossier dans lequel il croit être, c'est à dire /blog/tag/politique/page/mes_images/mon-images.png :-D.
Pour éviter cela c'est très simple, il suffit de définir la base des chemins relatifs qui seront employés dans votre page. Cela ce fait très simplement avec la balise base qui prend l'attribut href dont la valeur doit être une url (pas un chemin relatif forcément).
 → Code : Exemple d'utilisation de la balise base
  1 
<base href="http://pablo.rauzy.free.fr/" />
Ainsi le navigateur cherchera bien l'image dans /mes_images/mon-images.png.

Pour les autres pages que le blog, j'ai simplement renommé les fichiers contact.php en contact.html.php et creations.php en creations.html.php, du coup avec le MultiViews on peut y accéder en allant sur contact.html et creations.html, tout simplement.

Toutefois les anciennes url marchent toujours, j'allais pas me priver des quelques liens entrants que j'ai :-p. En fait quand on utilise une ancienne url, le navigateur reçoit le code 301 Moved Permanently puis est redirigé vers la nouvelle url.

Voilà, j'espère que ça pourra vous être utile. Si quelqu'un veut le code de la fonction qui transforme le pCode en xhtml 1.1, qu'il me contact, je leur donnerais volontiers. Si je ne l'ai pas mis ici, c'est parce que le code que j'utilise pour la rédaction des articles est celui là et donc ça mettait vraiment le oaí (le bordel) de mettre le code : les regexp qui l'interprètent sont interprétées... #-)
Tags : p4bl0, développement web, php, Free | 22 commentaires | #61 | Trackback

Commentaires

Ombre :

Le 19 Mars 2007 à 12:48
Bravo pour toutes ces améliorations!!! Et le système pour reprendre les anciennes URL est bien trouvé. Quand l'hébergeur interdit certaines choses dans le htaccess c'est bien pratique de pouvoir le faire via php. ;)
Merci, mais c'est aussi grâce à toi : sinon je n'aurais jamais su que le MultiViews était dispo chez Free :)

voyageur :

Le 17 Mai 2007 à 00:01
Très intéressant.
Si je comprends bien, ce script transforme un URL qui semble pointer sur une page statique en URL réel utilisé par le serveur. Cette transformation se fait quand le serveur reçoit la requête.
Comment ça se passe pour la suite, je veux dire que dans la page retournée par le serveur, il peut y avoir plein de URLs qui sont encore sous la forme compliquée, ces URLs n'étant pas transformés dans le sens inverse, ça arrive sur le navigateur, donc dès le 2ème clique, on retombe dans l'URL compliqué.
Cela se passe également pour les moteurs de recherche, dès que le moteur descend un niveau en-dessous dans le site, il ne voit plus que des URL compliqués.
Est-ce que je suis correct ?
Merci,
Regarde les liens sur ce site, ils sont tous adaptés au format de réécriture d'url que j'utilise. Donc le problème que tu décris n'existe pas. Par contre si tu n'adapte pas ton site à la réécriture d'url que tu utilises alors forcément si on clique sur un lien non-adapté c'est l'adresse du lien sur lequel on clique qui s'affiche.

Azurelia :

Le 08 Juin 2007 à 23:57
Salut Pablo, bravo pour ton Urlrewriting, j'aimerais l'effectuer sur mon forum de type phpbb, egalement hébergé chez free, l'objectif d'une telle manoeuvre et que chaque topic soit référencé sur free.

Pourrais-tu m'éclairer sur la marche à suivre ?
Merci
Si ce n'est pas déjà fait, envoie moi un mail (voir page "Contact") et je te recontacterais dès que je le pourrais, je passe mon bac la semaine du 11 au 15 juin et en ce moment j'ai pas le droit d'avoir mon ordi, là je passe en coup de vent juste pour voir les réactions sur mon blog et éventuellement y répondre ;-).

Bigou :

Le 15 Septembre 2007 à 13:54
Tout d'abord, bonjour et merci pour cette astuce.

Je vais sans doute passé pour in idiot, mais ça le sera toujours moins que de ne pas demander :
Le bout de code que tu donne plus haut (pour l'URL rewriting), c'est à inclure dans le code de da 1ere solution d'URL rewriting ?

Merci d'avance pour ta réponse.
Pourquoi tu passerais pour un idiot ? Je ne l'ai pas précisé et si tu ne connais pas trop PHP tu ne peux pas deviner ;-)
La réponse est non, ce code n'est pas à insérer dans le premier, c'est une nouvelle solution à part entière :-).

Olivier Pons :

Le 02 Octobre 2007 à 13:57
Merci beaucoup pour cette astuce, maintenant tous mes blogs fonctionnent vraiment correctement, sans utiliser cette bidouille via le code d'erreur 404.

Trop content.

Bravo.
Content que ça serve à d'autres que moi :-).

Jérémy :

Le 02 Novembre 2007 à 12:55
Bonjour! C'est un excellent tuto, mais j'ai une question encore plus bète que Bigou... J'ai enregistré le code dans un fihier (par exemple: url_rewriting.php), et je l'inclu dans toutes mes pages... Et c'est tout ce qu'il faut faire? Car ça ne marche pas chez moi, étant pourtant chez free. Il doit me manquer un truc et je ne vois pas trop...

Merci d'avance.
Il y avait un petit bug dans mon code qui a fait que certains &amp;&amp; s'affichaient &amp;amp;&amp;amp;. N'as tu pas copié ce mauvais code ? (j'ai mis ça à jour donc maintenant tu peux faire un copié-collé) :-).
Si tu avais déjà vu l'erreur et que tu ne l'avais corrigée, regarde si tu appel bien tes variables comme il faut (les $_GET[]).
Si ça ne marche toujours pas, dis moi le et envoie moi le bout de ton code concerné par mail, on regardera ça de plus prêt ;-).

Rémi :

Le 08 Novembre 2007 à 13:14
Bonjour,

Sur mon site je voudrais adapter votre technique d'url-rewriting mais j'avoue que je n'y comprends pas grand chose ...

Voici l'url que j'ai actuellement lorsque que l'on visualise les infos d'un lac

http://rbaudry.free.fr/lacs/page_visualisation.php?id=462

Je voudrais avoir ceci :

http://rbaudry.free.fr/lacs/etang-de-coligny.html

Est-ce possible ?

Si oui, pouvez-vous m'aider ?

Merci d'avance.
C'est tout à fait possible, il faut juste avoir un moyen d'associer "etang-de-coligny" à 142. Cela peut-être fait par une nouvelle table, mais ça fait deux appels à MySQL au lieu d'un, ou par un fichier PHP qui contient un array associatifs, mais ça prendrait beaucoup de place...
Une autre solution serait soit d'ajouter un champs dans la table pour mettre un text_id par exemple, soit de carrément remplacer les id par du texte.
Par contre il va falloir le faire dans un fichier lacs.php à la racine du compte Free. Ensuite il suffira de placer ça au début du fichier :
if (isset($_SERVER['PATH_INFO'])) {
    $_GET['id'] = substr($_SERVER['PATH_INFO'],1,-5);
}
Et le tour est joué !

brazzmonkey :

Le 03 Janvier 2008 à 22:34
salut et merci pour l'astuce de l'url rewriting.
juste une précision tout de même : en cas d'utilisation de liens pointant vers des anchors internes à la page, on rencontre des petits problèmes car les navigateurs cherchent l'anchor à partir du chemin défini dans la base base.
C'est étrange je n'ai pas ce problème... J'ai bien une base définie, mais les liens internes à la page se comportent de manière tout à fait normale. Ton problème doit venir d'autre chose du coup :-/

nicolas :

Le 05 Février 2008 à 17:48
Salut;

Moi aussi j aimerai bien mettre un codage pour l'url rewriting sur mon free.fr pour mon forum en phpbb avec prémod shadow.

Or il s'avère que je comprend rien du tout pour ce qui est de la marche a suivre...

Ou faut il mettre le code? dans l'index.php du forum? entre quelles balises? si je met ce code est ce qu'il faut le mettre sur toutes les pages?

Je suis désolé avec mes questions de très grand débutant...

Voila moi c'est tout mon forum que je veux avec des titres http://pleindeblagues.free.fr/forum/index.php

Merci de me répondre par email aussi ***
Je ne sais pas bien comment fonctionne phpBB, mais quoi qu'il en soit la solution proposée ici n'est pas adaptable directement. Il faudrait faire une nouvelle table MySQL (ou un fichier) qui associe un identifiant urlisable de chaque forum à son id et faire de même pour les threads... En gros faudrait carrément faire un plugin pour phpBB, pas le temps de le faire et encore moins de voir comment fonctionne les plugin phpBB, sauf si on paye, évidemment :-D.

Fido :

Le 24 Février 2008 à 12:35
Bonjour !

Ce script est vraiment très intéressant. Je suis bien content de pouvoir l'utiliser :).

Cependant, j'ai remarqué que si j'actualise cette page, je vais rester au même point.

Sur mon site, si j'actualise la page, je suis renvoyé tout en haut (hélas...). De même pour l'utilisation des boutons "Précédent" et "Suivant".

Je me demandais si cela était du à un script particulier, l'utilisation d'un système de cache, ou autre ?

En tout cas merci pour ce script ! C'est tout simplement géant !
Le code que je donne n'intervient pas du tout à ce niveau là. Peut-être qu'il y a une ancre quand l'url quand tu reload la page de ton site (un #top par exemple). :-).

Fido :

Le 24 Février 2008 à 13:06
Salut,

Merci de ta réponse exprès :) !
Hélas non, pas d'ancre... Enfin ce n'est pas très grave, je vais chercher et trouver une solution !

Encore merci de ta réponse et pour le code :-D !

Nicolas :

Le 04 Mars 2008 à 22:33
Merci beaucoup pour ta réponse, j'ai d'ailleurs changé d'avis ;) , trop complexe pour moi, par contre une autre question à te poser j'ai.

Peut-on d'après toi utiliser ce script sur le module Phortail.

C'est un portail en php le tout sans Base de données installé toujours sur mon serveur free.
Tiens une le site officiel http://phortail.free.fr/index.php

Voila merci d'éclairer une nouvelle fois ma chandelle
Je suis aller voir un peu phortail. Comme pour PHPbb, mon script ne sera pas intéressant à moins d'aller chercher des infos dans la (sorte de) "base de données" de phortail etc...
Tel quel, mon script ne permettra que de transformer une adresse du genre http://phortail.free.fr/articles.php?pg=art24 en http://phortail.free.fr/articles/pg/art24.html par exemple, mais rien de bien plus joli. Désolé :-)

Mustapha :

Le 10 Mars 2008 à 17:14
Salut
Merci pour cette redirection très ingénueuse, mais il faut préciser qu'il faut aussi mettre une redirection à la fin de ce code à l'aide de la fonction require.
Salut et bonne continuation.
Heu... ben nan en fait, enfin ça dépent de comment on s'organise. À la base le code est prévu pour être mis en haut de fichier, comme ça dans la suite les variables $_GET sont accessibles comme avant :-).

Stéphanie :

Le 06 Mai 2008 à 03:08
Bonsoir Pablo,
Et d'abord merci pour votre script!
Je sais pas comment ca marche, mais il est génial! ;)

Alors actuellement mes pages ressemble à ca:
jeux-flash.php?id=11

Et je voudrais faire quelle que chose comme :
jeux-flash/11-je-recupere-le-nom-du-jeux.html

Alors j'ai bien rajouté le script dans header.php puis dans jeux-flash.php mais ca ne marche pas...
même avec jeux-flash/11.html

Serait-ce possible?

Sinon j'ai aussi trouvé ca dans ma page jeux-flash.php :

$game_name = $_GET['id'];

if(!isset($_GET['id']) || empty($_GET['id']))
	message($lang_common['Bad request']);

Ca vient peut être de ca, ou du script qu'il faut adapter, mais moi j'y comprend rien...

Si vous pouvez me donner un petit coup de main,
ca serais vraiment gentil, merci d'avance :)
Avec le script que je propose, il faudrait que tes urls soient de la forme jeux-flash/id/11.html par exemple. Ça marchera aussi avec jeux-flash/id/11/nom-du-jeu.html.
Sinon il faut faire un autre script pour avoir jeux-flash/11-le-nom-du-jeux.html, mais ça n'est pas très compliqué à faire.

stéphanie :

Le 06 Mai 2008 à 03:20
Une petite précision concernant mon 2eme problème :
Je sait quelle requête utiliser pour récupérer le nom du jeux.
Par contre comment remplacer les espaces par des -

Encore un grand merci si vous m'aider.
Stéphanie.
Tout simplement un str_replace('-', ' ', $str);$str est le nom du jeu avec les -.

stéphanie :

Le 06 Mai 2008 à 21:30
J'ai placé le script dans header.php et ca marche super!
Merci Pablo! ^^

Pouvez vous me montrer comment utiliser str_replace et éventuellement me faire le script pour supprimer l'id ?

J'ai déjà essayé pleins de trucs depuis cette après midi,
seulement rien ne marche avec moi... xD

PS: Prennez mon adresse msn si vous préféré, merci encore.

Stéphanie.

stéphanie :

Le 07 Mai 2008 à 09:37
Ok c'est bon pour le str_replace ^^'
Pour ceux qui ont besoin :
$str =  $machin_chose
$str = str_replace(' ', '-', $str);

Et pour remplacer les caractère spéciaux j'ai trouvé ca :

function RemoveAccents($string)	{    

$string= strtr($string,

"ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ",

"aaaaaaaaaaaaooooooooooooeeeeeeeecciiiiiiiiuuuuuuuuynn");

return $string;

}

preg_replace('/[^a-z0-9-]/i','',$url);

Mais je sait pas trop quoi en faire..

Si vous avez un peu de temps à me consacrer prenez mon msn.
Encore merci Stéphanie
Okay on y va par msn, ça sera plus simple... :-)

narutoo7 :

Le 11 Août 2008 à 22:07
Salut, tout d'abord je tiens à te remercier pour ce tuto.
Ensuite si ce n'est pas trop te demander j'aimerais que tu confirmes si j'ai bien placé les codes et j'en suis désolé mais je suis un débutant en php:
Voila j'ai ajouté la balise base dans la balise <head> comme ceci :
<head>
// bien sur il y a aussi les balises meta et autres ici
<base href="http://exemple.free.fr/" />
</head>
Ensuite j'ai rajouté le code pour l'url rewriting en haut de la page en question mais ça ne marche pas, ai-je commis une erreur quelque part ? Si tu as le temps merci de m'en informer.
Je te contact par mail, j'ai l'impression que t'as pas dû tout comprendre.

Kira-kyuukyoku :

Le 10 Juin 2009 à 19:50
Super ce code, fonctionne niquel. Merci ! ^^

benoit :

Le 17 Juin 2009 à 11:13
Salut,

Merci pour l'astuce elle fonctionne vraiment bien c'est super. Par contre j'aurai aimé l'adapter pour transformer une url du type http://monsite.free.fr/index.php?page=article&id=1
en http://monsite.free.fr/index/article/1.html (et encore mieux sans le "index/") est-ce possible? Si oui pourrai-tu me donner quelques conseils. Pour être franc je ne suis pas un pro du php et je ne comprend pas vraiment ton code (particulièrement les lignes avec les conditions ternaires, le plus important quoi! ;) )

Et au fait au passage l'url
http://monsite.free.fr/index/page/article/id/1-titre-article.html fonctionne c'est normal?

benoit :

Le 17 Juin 2009 à 11:49
Finalement j'ai réussi par moi-même (il y a quand même "index/" toujours présent mais j'imagine que c'est indispensable).
Merci encore pour l'astuce
Hello, j'avais pas vu tes comments désolé.
pour enlever le index tu peux renommer la page index.php en article.php mais si elle sert à ça seulement quoi, sinon ça va mettre le óai.
Si t'as d'autre questions contact moi par mail ça ira plus vite :-)

al :

Le 13 Mai 2011 à 14:47
Super, méthode réussie avec succès sur page perso free et avec le CMS Getsimple.

Qq modifs à faire: dans index.php

Après
if (isset($_GET['id'])){
$id = str_replace ('..','',$_GET['id']);
$id = str_replace ('/','',$id);
$id = lowercase($id);
} else {
$id = "index";
}

AJOUTER:

if (isset($_SERVER['PATH_INFO'])) {
$id = basename($_SERVER['PATH_INFO']);
}


puis aller chercher basic.php:
REMPLACER
if ($PRETTYURLS == '1') {
if ($slug != 'index'){
$url = $full . $parent . $slug . '/';

PAR
if ($PRETTYURLS == '1') {
if ($slug != 'index'){
$url = $full . 'index/' . $parent . $slug . '/';


Ainsi toutes les URLs pointeront vers index.php/...
et le petit bout de code dans index.php remplira correctement la variable...
Nice non?

Ajouter un commentaire :

Formatage du texte : ##gras##, //italique//, --barré--, __souligné__.
Pour créer un lien, utilisez la syntaxe suivante : @[http://adresse/du/lien/](texte du lien).
Pour insérer du code, mettez le entre double crochets : [[votre code]].
Votre adresse email ne sera pas affichée.