OVH Cloud OVH Cloud

formattage PHP pour url_rewrite

4 réponses
Avatar
simOn
salut,
je commence a me pencher sur le mod_rewrite d'apache

et afin de laisser le choix d'implementer ou non ce mode, je définis une
globale dans mon appli

mes liens sont formatés de facon standard :
index.php?rub=news&ampid=78

j'ai une fonction URLrewrite() qui contient les ereg pour formater mes
liens et j'appelle cette fonction de callback en gerant le flux HTML via PHP
-->
if (URL_REWRITE==1) ob_start('URLrewrite'); else ob_start();

que pensez vous de cette méthode ?

y'a t'il plus simple ? plus optimisé ( les regex c'est lourd ) ? je suis
preneur de toutes vos idées.


merci

-- SimOn

4 réponses

Avatar
Eric Daspet
simOn wrote:
y'a t'il plus simple ? plus optimisé ( les regex c'est lourd ) ? je suis
preneur de toutes vos idées.


Déjà tu peux utiliser les preg_, qui sont globalement *beaucoup* plus
rapides.

Maintenant tu as d'autres possibilités que le mod_rewrite, histoire de
laisser tes belles URL même sur les hébergements mutualisés :

Sur la plupart des configurations en CGI tu peux faire des URL du type
script.php/xxx/yyy/zzzz et faire par exemple :
forum.php/TitreForum/message à la place de
forum.php?titre=TitreForum&msg=message

Sur les Apache avec mod_negociation tu peux même en profiter pour ne pas
spécifier l'extension du script (qui sera déterminée automatiquement par
apache s'il n'y a pas d'autres fichiers de même nom avec une extension
différente) et faire forum/TitreForum/message

On revient à faire comme un rewrite mais avec un préfixe imposé (le nom
du script) au départ (ce qui devrait être peu gênant dans la plupart des
cas). Tu pourra relire et réinterpréter l'URL avec le
$_SERVER['HTTP_REQUEST_URI'].



Tu as aussi la bidouille du ErrorDocument. La plupart des hébergeurs
laissent modifier cette directive. Il suffit alors de te débrouiller
pour que tes URL ne correspondent à aucun fichier existant et donner un
script PHP comme erreur 404. Ton script pourra réinterpréter
$_SERVER['HTTP_REQUEST_URI'] et agir en conséquence (générer une vrai
404 ou exécuter les bons scripts).



Il y a quelques autres bidouilles mais qui demandent le controle de la
conf Apache, je pense que dans ce cas là c'est aussi bien d'activer le
mod_rewrite.

--
Eric

Avatar
simOn
Eric Daspet wrote:

salut eric, ( marrant, j'te vois partout ;-)... )


simOn wrote:

y'a t'il plus simple ? plus optimisé ( les regex c'est lourd ) ? je
suis preneur de toutes vos idées.



Déjà tu peux utiliser les preg_, qui sont globalement *beaucoup* plus
rapides.


c'est noté. En général, j'evite l'utilisation des REGEX parce que c'est
lent, chiant à pondre et indéchiffrable en lecture.

Maintenant tu as d'autres possibilités que le mod_rewrite, histoire de
laisser tes belles URL même sur les hébergements mutualisés :

Sur la plupart des configurations en CGI tu peux faire des URL du type
script.php/xxx/yyy/zzzz et faire par exemple :


"Sur la plupart" ? quel est ce mystère ;-)

forum.php/TitreForum/message à la place de
forum.php?titre=TitreForum&msg=message


très bien,
c'est le procédé utilisé par olivier sur dotclear, non ?
(hormis le fait qu'il formate le nom des billets et les stocke en base)

Sur les Apache avec mod_negociation tu peux même en profiter pour ne pas
spécifier l'extension du script (qui sera déterminée automatiquement par
apache s'il n'y a pas d'autres fichiers de même nom avec une extension
différente) et faire forum/TitreForum/message


je ne connaissais pas ce mod, vais me renseigner dessus

On revient à faire comme un rewrite mais avec un préfixe imposé (le nom
du script) au départ (ce qui devrait être peu gênant dans la plupart des
cas). Tu pourra relire et réinterpréter l'URL avec le
$_SERVER['HTTP_REQUEST_URI'].


j'utilise déjà cette technique


Tu as aussi la bidouille du ErrorDocument. La plupart des hébergeurs
laissent modifier cette directive. Il suffit alors de te débrouiller
pour que tes URL ne correspondent à aucun fichier existant et donner un
script PHP comme erreur 404. Ton script pourra réinterpréter
$_SERVER['HTTP_REQUEST_URI'] et agir en conséquence (générer une vrai
404 ou exécuter les bons scripts).


encore une astuce intéressante ;-)

Il y a quelques autres bidouilles mais qui demandent le controle de la
conf Apache, je pense que dans ce cas là c'est aussi bien d'activer le
mod_rewrite.


merci pour tout !


Avatar
Eric Daspet
simOn wrote:

c'est noté. En général, j'evite l'utilisation des REGEX parce que c'est
lent, chiant à pondre et indéchiffrable en lecture.


Oui, mais quitte à les utiliser autant limiter les dégats en utilisant
la bonne librairie.

"Sur la plupart" ? quel est ce mystère ;-)


"chezmoicamarche". Sauf erreur il s'agit d'un comportement standard mais
j'ai ouie dire que ça posait problème à certains, donc je prend mes
précautions. Je n'en sais pas plus.

très bien,
c'est le procédé utilisé par olivier sur dotclear, non ?
(hormis le fait qu'il formate le nom des billets et les stocke en base)


Par défaut oui, je crois. Enfin il est en train d'implémenter la
possibilité de rewrite là, et il a autorise aussi l'astuce du 404.

je ne connaissais pas ce mod, vais me renseigner dessus


Il est inclu par défaut, et activé sur la plupart des hébergeurs. En
fait il est prévu pour faire de l'auto-négociation de contenu. Tu lui
met un fichier html, un xhtml et un txt, il fera tout seul le choix en
fonction du navigateur. Pareil en lui mettant un gif, un png et un mng.
Ça c'est la théorie. En pratique comme le navigateur majoritaire
n'envoie pas les entêtes adéquates ça ne sert à rien à part des astuces
du genre, ou la négociation automatique de langue sur les contenus
statiques.

Ceci dit là on sort un peu trop du PHP, mail si tu as besoin de plus
d'infos.
--
Eric

Avatar
simOn
Eric Daspet wrote:
[...]
Ceci dit là on sort un peu trop du PHP, mail si tu as besoin de plus
d'infos.



merci pour le complèment. ++

--simon