Posté le 18 Mars 2007 à 20:23
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.
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).
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.
Le pCode est un langage de programmation mise en forme du texte.
Il a été créé par p4bl0 pour son site.
Il a été créé par p4bl0 pour son site.
La nouvelle méthode d'url rewriting
Pour ceux qui ne le savent pas, lemod_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
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];
}
}
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/" />
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... #-)
Ombre :
voyageur :
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,
Azurelia :
Pourrais-tu m'éclairer sur la marche à suivre ?
Merci
Bigou :
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.
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 :
Trop content.
Bravo.
Jérémy :
Merci d'avance.
&&s'affichaient&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 :
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.
Une autre solution serait soit d'ajouter un champs dans la table pour mettre un
text_idpar exemple, soit de carrément remplacer lesidpar 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 :
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.
nicolas :
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 ***
Fido :
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 !
Fido :
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 :
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
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 :
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.
$_GETsont accessibles comme avant :-).Stéphanie :
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 :
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 :)
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 :
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.
str_replace('-', ' ', $str);où $str est le nom du jeu avec les -.stéphanie :
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 :
Pour ceux qui ont besoin :
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
narutoo7 :
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 :
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.
Kira-kyuukyoku :
benoit :
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 :
Merci encore pour l'astuce
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 :
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?