[Apache] Apache et url rewriting - De langue.php?lg=fr/toto/ à /fr/toto/ ?

Bonjour,

D’ordinaire, on réécrit les url afin de transcrire http://www.monsite.com/page.php?parametreA=15&parametreB=42[/url] en [url=http://www.monsite.com/page_parametreA15_parametreB42/]http://www.monsite.com/page_parametreA15_parametreB42/ cad qu’en saisissant la 2e adresse qu’on puisse atteindre la 1e.
Moi ce que j’aimerais faire, c’est qu’en saisissant la 1e qu’on puisse atteindre la 2e.
J’ai donc une url du type www.monsite.com/langue.php?lg=fr/repertoire1/index.php et je souhaiterais atteindre l’adresse www.monsite.com/fr/repertoire1/index.php.
Voici mon fichier .htaccess

Options +FollowSymlinks
RewriteEngine on
RewriteRule ^langue\.php\?lg=([a-z]{2})/(.*)$ /$1/$2 [L]

mais ça ne marche pas.
Quelqu’un pourrait-il 'maider ? Merci.

visiblement, tu as encore quelques lacunes dans le principe de l’URL Rewriting …

le principe de base consiste à proposer à l’utilisateur une URL “virtuelle” (qui ne pointe sur aucune page) … et à faire en sorte que, lorsque l’utilisateur utilise cette adresse, ce soit en réalité une autre page qui soit afficher …
concrètement, pour reprnedre ton exemple l’utilisateur tape www.monsite.com/fr/repertoire1/index.php dans la barre d’adresse, mais on lui affiche www.monsite.com/langue.php?lg=fr/repertoire1/index.php

faire l’inverse n’a, en toute logique, aucun sens, si ce n’est d’alourdir encore plus le traitement de ta page sans faciliter la navigation et l’indexation de ton site par les moteurs de recherche …

essaie la rêgle suivante :

Options +FollowSymlinks
RewriteEngine on
RewriteRule ^langue.php?lg=([a-z]{2})/(.*)$ $1/$2 [L]

et si ça ne marche toujours pas, active les logs du mod_rewrite pour voir comment il lit et comprend ta rêgle, et donc identifier pourquoi ça ne fonctionne pas :oui:

peut-être parce que la query_string ne fait pas partie de l’url analysée (elle ne contient que “langue.php”
voir du côté de rewriteCond pour récupérer cette query_string

edit: voilà un exemple

RewriteCond %{QUERY_STRING} parent=([0-9]+)
RewriteRule /([0-9]+)\?parent=([0-9]+) /$1/parents/%1 [PT]
http://forum.apachefrance.com/viewtopic.ph…00c1e7ddaf03c27
donc dans rewritecond tu recherche dans ta query_string, dans rewriterule, tu l’utilise avec %1

ah ui :oui:
%{QUERY_STRING} si je ne m’abuse

tout a fait kisScoOL excellente mémoire :super:

Merci pour vos réponses.
Mais en fait, j’avais un site en pseudo frame qui utilisait le fichier langue.php pour récupérer en paramètres le répertoire accessible ainsi que la langue.
Donc quand on saisissait www.monsite.com/langue.php?lg=fr/repertoire1/index.php on accédait au fichier /fr/répertoire1/index.php.
Sauf que j’ai viré les frames ainsi que le fichier langue.php et mon site est désormais accessible avec l’url www.monsite.com/fr/repertoire1/index.php.
Mon pb est que mes internautes continuent de saisir www.monsite.com/langue.php?lg=fr/repertoire1/index.php et j’aimerais que l’url soit réécrite de façon transparente, comme s’ils avaient saisi www.monsite.com/fr/repertoire1/index.php.
La QUERY_STRING fait bien partie de l’URL analysée :smiley:

C’est logique, tu veux que les anciennes urls fonctionnent pour ceux qui ont des bookmark, et même pour les pages déjà indexées, mais dans ce cas il faudrait un redirection permanente: les internautes voient que l’url change, et le moteurs en tiennent compte pour se mettre à jour.

parenthèse fermée, as-tu bien regardé les logs? car j’avais constaté que pour analyser la partie query_string il fallait ruser.

d’autre part, est-ce que tu n’aurais pas du conserver l’ancienne page “langue.php” et faire ta redirection dedans?
ça éviterais d’enchainer 2 réécritures d’urls successives (surtout qu’il faut bien vérifier que les règles s’appliquent toutes, les paramètres “L” atc. vont empêcher la recherche sur d’autres règles).

Si j’aurais dû mais je voulais éviter la solution qui consisterait à conserver ce fichier (un fichier en plus dans ma structure web).