Comment passer les parametres $1 ou $2

Nouveau WRInaute
Débutant en url rewriting, je ne vois pas comment passer les parametres $1 ou $2 dans le fichier .htacess.
Je m'explique : je veux que :
Code:
http://127.0.0.1/index.php?action=presentation et
http://127.0.0.1/index.php?action=annuaire

apparaisse comme resultat :
Code:
http://127.0.0.1/presentation/index.html et 
http://127.0.0.1/annuaire/index.html
Mon code .htacess :
Code:
Options +FollowSymlinks
RewriteEngine on
RewriteRule ^index.html$ index.php [L]
RewriteRule ^presentation/.*\.html$ index.php?action=presentation [L]
RewriteRule ^annuaire/.*\.html$ index.php?action=annuaire [L]
C'est pas pratique comme je fais car il va falloir que je rewrite chaque page, il doit y avoir un moyen plus simple non ?
 
WRInaute occasionnel
RewriteRule ^forum/(.*),(.*)/(.*)$ index.php?rub=forum&s=$1&start=$2&$3 [L]
par exemple,

je te conseil de revoir une doc sur l'url rewriting, si mes souvenirs sont bon il y en a une très bien faite sur le site de spip...
 
Nouveau WRInaute
deja lu cet article

j'ai deja lu cet article, mais cela ne résout pas mon problème.
Je ne comprends pas comment stocker les infos dans les variables utilisées et citées couramment dans les exemples que je lis.
$1 ou $2 : on leur transmet comment les valeurs souhaitées et on les exploitent comment en php ?
merci
 
WRInaute impliqué
en PHP ca change rien, elles gardent leur valeur.
tu renomes tes liens href
h**p://127.0.0.1/index.php?action=presentation
en
h**p://127.0.0.1/presentation/index.html
et
l'htaccess "RewriteRule" en
h**p://127.0.0.1/index.php?action=presentation
donc ca marche.
 
Nouveau WRInaute
suis d'accord mais...

Oui, mais je dois faire ça pour chaque page : il faut donc que je change tous les liens à l'intérieur du site pour que les repertoires virtuels soient pris en compte.
Je pensais qu'il y avait une maniere plus courte et plus efficace que de devoir ecrire pour chaque page de mon site :
Code:
RewriteRule ^annuaire/index\.html$ index.php?action=annuaire [L]
RewriteRule ^annuaire/xxx\.html$ index.php?action=xxx [L]
.....................................................................
.....................................................................
Y a-til une solution, à moins que le fait de devoir diviser mes liens en repertoire puis page.html ne correspondent pas trop à la logique de url rewriting. Peut être dans mon php, ça aurait plus lourd, inutile mais plus pertinent si le test s'effectuai sur :
Code:
index.php?action=annuaire&&ssaction=xxx
Donc personne ne voit d'autres solutions que de Rewriter chaque page de mon site, avec une regle RewriteRule pour chaque page ?[/b]
 
WRInaute impliqué
Re: suis d'accord mais...

rootnono a dit:
Oui, mais je dois faire ça pour chaque page : il faut donc que je change tous les liens à l'intérieur du site pour que les repertoires virtuels soient pris en compte.
Je pensais qu'il y avait une maniere plus courte et plus efficace que de devoir ecrire pour chaque page de mon site :
Code:
RewriteRule ^annuaire/index\.html$ index.php?action=annuaire [L]
RewriteRule ^annuaire/xxx\.html$ index.php?action=xxx [L]
J'ai pas compris. Tu parles du htaccess ou des pages du site
Pour chaque page, au lieu de href=h**p://127.0.0.1/index.php?action=presentation
tu écris href=h**p://127.0.0.1/presentation/index.html
 
Nouveau WRInaute
du .htaccess

Oui je parlais des modifications plus efficaces du .htaccess. Etant feignant, je cherche la meilleure solution pour ne pas à avoir écrire des RewriteRule pour chaque page . Je sais qu'il faut que je modifie tous les liens a l'intérieur de mon site.
C'est ces histoires de $1 et $2 citées dans les exemples qui fait que je pensais analyser $1 ou $2 et faire mon script php en fonction de ça.
En plus clair :
Dans le html :
je clique sur un lien :
Code:
<a href="htp://127.0.0.1/annuaire/index.html">annuaire</a>
<a href="htp://127.0.0.1/annuaire/presentation.html">annuaire</a>
Dans le php qui va interpreter la vraie url ou celle cachée :
Code:
switch ($_GET["action"]{
case "annaire":
include (page1.html);
break;
case "presentation":
include (page2.html);
break;
}
et dans le .htaccess :
Code:
RewriteRule ^/annuaire/index\.html$ index.php?action=annuaire [L]
RewriteRule ^/annuaire/presentation\.html$ index.php?action=presentation [L]
Ca ne me parait pas optimiser et assez factoriser comme solution, si ?
 
WRInaute discret
Code:
RewriteRule ^annuaire/(.+)\.html$ index.php?action=$1 [L]
Est-ce que ça marche de cette façon ?

Quand tu auras -http://www.site.tld/annuaire/presentation.html
Ça rewritera -http://www.site.tld/annuaire/index.php?action=presentation.
De la même façon si l'url est -http://www.site.tld/annuaire/presentation.html.
 
Nouveau WRInaute
oui,mais ...

Evidemment ça marche :
donc si je mets en url un truc du genre :
Code:
<a href=http://www.site.com/annuaire/index.html"">annuaire</a>
<a href=http://www.site.com/annuaire/xxxxxxxxxx.html"">test</a>
Mon problème ça n'est pas que ça marche pas, c'est que je suis obligé de faire correpsondre à chaque url exotique une url appropriée. Je ne vais pas par exemple ecrire ds le .htaccess:
Code:
RewriteRule ^annuaire/(.+)\.html$ index.php?action=annuaire [L]
car cela ne correspondra qu'au rewrite d'una page.
C'est quoi ce $1, c'est une maniere de dire que c'est une variable, mais c'est faux car on ne transmet rien dans cette entité et on ne l'exploite pas.
J'en conclut qu'il faut par chaque url, rewrité les pages pour prendre en compte toutes mes pages, ça n'est pas très pratique ???
 
Nouveau WRInaute
alors pas de suggestions

J'attends les suggestions des connaisseurs de l'url rewriting ?
Faites moi comprendre ce que l'on entends par ces variables : c'est utilisé pour une explication claire de l'url rewriting ou $1 et $2 sont vraiment des variables dans que l'on gère à partir du .htaccess ?
 
WRInaute passionné
Il y a un problème de logique dans cette contruction, elle en devient compliqué.

Essayons de faire simple !
Le répertoire c'est annuaire, il est fixe pour tout l'UR, donc c'est pas une variable (si je me trompe on corrige ;-))

le mot action doit être une action
soit index
soit présentation
soit ce_que_tu_veux

et on a trois pages

index.html
presentation.html
ce_que_tu_veux.html
(ce ne sont que page1.html, page2.html .... mais renommées)

ensuite
include ($_GET["action"].html)

on peut faire de même avec l'UR, il faut reflechir en générique, et non en particulier avec conditions
"inclusion de la page dont le code est donné par le contenu de la variable action "
 
WRInaute passionné
Re: alors pas de suggestions

rootnono a dit:
J'attends les suggestions des connaisseurs de l'url rewriting ?
Faites moi comprendre ce que l'on entends par ces variables : c'est utilisé pour une explication claire de l'url rewriting ou $1 et $2 sont vraiment des variables dans que l'on gère à partir du .htaccess ?

$1 et $2 sont des "références arrière" (backtracks). Ce ne SONT PAS des variables que tu passes à la page de destination, ce SONT en quelque sorte des variables internes à la règle de réécriture. Si tu croises un jour des expressions régulières, tu seras en terrain connu. Ces références correspondent aux sous-chaines situées dans les parenthèses de la première partie de la règle de réécriture.

Exemple :
/annuaire/^(.+)\.html$ ---> index.php?page=$1

Ceci signifie que toute demande d'url de la forme /annuaire/trucbidulemachin.html DOIT être renvoyée en réalité vers l'adresse index.php?page=trucbidulemachin

Pour ce qui est des variables au sein de tes pages, ici tu as $_GET['page'] qui vaudra trucbidulemachin

A toi donc de savoir de quelles variables tu as besoin dans ton script final, et en fonction de ça quelles sont les URL que tu veux utiliser.

A voir :
http://www.spip-contrib.net/article106.html

Fred
 
Nouveau WRInaute
merci pour ces precisions

ces explications sont très claires, merci messieurs.
Les backtracks $1 et $2 ne sont donc jamais utilisés réellement dans un fichier .htacess.
Je ne verrai jamais dans un fichier .htaccess :
Code:
/annuaire/^(.+)\.html$ ---> index.php?page=$1 
[/code
Le $1 correspond en réalité à une de mes variales predefinies.
Mais la solution pour moi alors c'est de réellement réecrire pour chaque page les url (en absolue) au sein du document html, de gerer les variables dans mon script php (include) et
de faire ][b]un rewrite de chaque page en fonction de chaque condition[/b] du style :
[code]
/annuaire/^index\.html$ ---> index.php?page=annuaire
/annuaire/^presentation\.html$ ---> index.php?page=presentation
Je ne vais pas utiliser l'expression reguliere (.+) car n'importe quel fichier correspondrait
au fait de faire l'action suivante index.php?page=annuaire et pas index.php?page=presentation ?
 
WRInaute discret
Si tu ne souhaites pas utliser (.+) utilise ([a-z]+) si tu veut être sûr qu'on ne passe que des lettres (c'est plus restrictif).

Code:
/annuaire/^([a-z]+)$\.html ---> index.php?page=$1

Autrement, je ne vois pas ce qui t'embête, le code qu'on t'a donné remplis le rôle que tu lui demande : les pages sont bien rewritées en fonction de chaque condition, tu n'as pas besoin de spécifier annuaire ou presentation dans le htaccess, il va reconnaitre n'importe quel suite de lettres qui sera placée entre annuaire/{ta_page}.html et indiquera à ton script : index.php?page={ta_page}.

J'espère avoir compris ta demande. :)
 
WRInaute passionné
Re: merci pour ces precisions

rootnono a dit:
Les backtracks $1 et $2 ne sont donc jamais utilisés réellement dans un fichier .htacess.

Ben justement si, elles ne sont utilisées que là, d'ailleurs.

Je ne verrai jamais dans un fichier .htaccess :
Code:
/annuaire/^(.+)\.html$ ---> index.php?page=$1

Au contraire, tu le verras souvent.

Le $1 correspond en réalité à une de mes variales predefinies.

Ben... non, pas du tout.

ces explications sont très claires, merci messieurs.

Ah ? :D
 
Nouveau WRInaute
c'est plus restrictif c'est clair

Ya quand même quelque chose qui m'échappe :
il faut bien que pour chaque page, le navigateur redirige ma page en fonction de l'url de départ (style index.php?action=annuaire).
Donc qd je click sur :
Code:
<a href="http://www.site.com/annuaire/index.html">annuaire</a>
<a href="http://www.site.com/annuaire/presentation.html">presentation</a>
Cela correspond à mon url de départ qui charge une page en fonction de l'action du style:
Code:
index.php?action=annuaire
index.php?action=presentation
et du coup, pour chaque url rewritée, je dois faire correspondre une action. Les expressions regulieres du style ([A-Z]+) ne servent pas à grand chose ?
Car ça n'est pas n'importe quelle action qui agit en fonction de n'importe quelle chaine de caracteres qui va apparaitre dans l'url ??
 
Discussions similaires
Haut