OVH Cloud OVH Cloud

URL rewriting cote php

2 réponses
Avatar
Reno
Bonjour,

Dans une application web reposant sur apache et php, on peut écrire
les urls de plusieurs manières. Par exemple:

(basic) www.host.com/index.php?var=value
(PATH_INFO) www.host.com/index.php/value
(mod_rewrite) www.host.com/value

Comment faire si je souhaite que mon application puisse fonctionner
quelque soit la façon d'écrire les urls ?
Mon problème se situe au niveau de l'output, pas de l'input (je suis
capable de traiter les requètes pour les 3 types cités).

Par exemple si je décide d'écrire tous les urls suivant la forme
mod_rewrite, je ne pourrais pas porter l'application sur un server qui
ne supporte pas mod_rewrite.

Le mieux serait une solution complètement générique qui ne soit pas
limité à des schema conventionels du type
www.host.com/page/action/id.

Des suggestions ?
Merci

2 réponses

Avatar
Olivier Miakinen

Dans une application web reposant sur apache et php, on peut écrire
les urls de plusieurs manières. Par exemple:

(basic) www.host.com/index.php?var=value
(PATH_INFO) www.host.com/index.php/value
(mod_rewrite) www.host.com/value

Comment faire si je souhaite que mon application puisse fonctionner
quelque soit la façon d'écrire les urls ?
Mon problème se situe au niveau de l'output, pas de l'input (je suis
capable de traiter les requètes pour les 3 types cités).

[...]

Des suggestions ?
Merci


Peut-être regarder $_SERVER["REQUEST_URI"], et en déduire le mode de
fonctionnement, connaissant les paramètres passés.

Note que tu dois quand même avoir une liste de shémas possibles pas
trop hétérogène. En effet, si <www.host.com/index.php?a=x&b=y> devient
<www.host.com/x/y> sur un serveur et <www.host.com/y/x> sur un autre,
alors tu n'auras aucune chance de pouvoir écrire un code commun.

--
Olivier Miakinen
Troll du plus sage chez les conviviaux : le nouveau venu, avec
son clan, s'infiltre dans les groupes de nouvelles. (3 c.)

Avatar
Reno
Merci pour votre réponse.

Naivement, je dirai que les urls de la forme
www.host.com/index.php?a=x&b=y sont les seuls qui contiennent toute
l'information necessaire pour un fonctionnement minimaliste.
Donc pour une solution générique, j'entrevois la possibilité de
travailler à partir de ces urls. Exemple:

$urlRewriter = new UrlRewriter($mapper);
$urlRewriter->format('index.php?a=x&b=y');

Retournerait www.host.com/index.php?a=x&b=y ou www.host.com/x/y etc
selon le type de $mapper.
Dans cette configuration, une grande partie de l'information est
injectée via la bonne instance de $mapper.

Une alternative plus simple mais qui pourrait s'avérer trop limité
par la suite serait de restreindre la forme des urls (et donc d'être
complétement tributaire de l'application). Par exemple:

$urlRewriter = new UrlRewriter('www.host.com');
$urlRewriter->format($page, $action, $id, $options);

Ces deux approches ont chacunes leurs avantages et inconvénients...
Peut être que quelqu'un a une meilleur idée ?

Au pire (ou meilleur?) des cas, il serait toujours possible de monter
d'un niveau en abstraction et rendre les deux solutions
interchangeables (par exemple en overloadant la methode
UrlRewriter::format()).