Réecrire url avec lang

Nouveau WRInaute
Bonjour,

Bon je ne suis pas très à l'aise avec le htaccess mais je rencontre un souci assez bizzare :

Je souhaiterai réécrire les urls de mon site de sorte que :

Code:
www.monsite.fr/page.php?lang=fr&divers=xx

devienne

Code:
www.monsite.fr/fr/page.php?divers=xx

J'essai tant bien que mal d'utiliser un htaccess :
Code:
RewriteEngine on
RewriteRule ^(fr|en)/(.*)\.php$ $2.php?lang=$1 [QSA]

Mais ça ne fait strictement rien (je précise que je test pour le moment en local, type: 127.0.0.1:8888/MONDOSSIERSITE/page.php)

Je précise que j'ai bien le mod_rewrite loaded (en regardant phpinfo())

D'ailleurs ce script fonctionne bien
Code:
RewriteEngine on
RewriteRule .* /maintenance.php [R=302,L]

Bref, je ne sais pas trop quoi faire ...

Merci d'avance pour votre aide :)
 
WRInaute discret
Code:
RewriteEngine on

RewriteCond     %{QUERY_STRING}     ^divers=(.+)$
RewriteRule      ^([a-z]{2})/(.+).php$     $2.php?lang=$1&divers=%1 [L]
 
Nouveau WRInaute
Bonjour et merci Giustino de ton aide.

Malheureusement le résultat est le même : rien ne se passe...

Y a t il un autre moyen de vérifier si le mod rewrite est malgré tout bien activé ?
 
WRInaute discret
Koxin-L.fr a dit:
Pour commencer, un site en maintenance, c'est une 503, pas une 302.

Ta remarque est correcte mais inutile dans ce contexte.
En effet, benthebest a bien précisé qu'il travaillait en local et son exemple ne servait que de test (il a d'ailleurs utilisé une 302, à juste titre, plutôt qu'une 301, dans l'unique but de vérifier l'activation du rewriting).

Bref, revenons-en au sujet principal.

benthebest a dit:
Malheureusement le résultat est le même : rien ne se passe...
En relisant ton premier message, j'ai pu constater que ton site était dans un sous-dossier et non à la racine principale.
Ceci est surement une des raisons du non-fonctionnement de mon code (j'y reviendrai plus bas).

benthebest a dit:
Y a t il un autre moyen de vérifier si le mod rewrite est malgré tout bien activé ?
Si ta règle de réécriture pour la maintenance (voir ton premier message) a fonctionné alors le rewriting est bien activé.

Pour en revenir au fait que ton site se trouve dans un sous-dossier et non à la racine, au niveau du htaccess il faut utiliser dans ce cas un RewriteBase afin de définir la base de réécriture.

Code:
RewriteEngine on
RewriteBase /MONDOSSIERSITE

RewriteCond     %{QUERY_STRING}     ^divers=(.+)$
RewriteRule      ^([a-z]{2})/(.+).php$     $2.php?lang=$1&divers=%1 [L]

Ceci devrait fonctionner. Néanmoins, tu risques d'avoir un duplicate content car l'ancienne adresse reste accessible. Je t'invite à consulter ce tutoriel https://www.webrankinfo.com/forum/t/tutoriel-eviter-les-boucles-de-redirection.168006/. Tu peux l'adapter à ton cas et ainsi éviter un duplicate content, tout en évitant une boucle de redirection.

Si tu as besoin d'aide pour ça, n'hésite pas à le dire. Essayes d'abord uniquement avec le code que je t'ai mis, ensuite tu mettras en place la technique du tutoriel.

NB: pour tester avec uniquement le code de base, essayes d'accéder à http://127.0.0.1:8888/MONDOSSIERSITE/fr/page.php?divers=xxx. Si ça fonctionne, tu es censé obtenir exactement le même contenu que http://127.0.0.1:8888/MONDOSSIERSITE/page.php?lang=fr&divers=xxx
 
Nouveau WRInaute
Merci de vos réponses

Si ta règle de réécriture pour la maintenance (voir ton premier message) a fonctionné alors le rewriting est bien activé.

Oop, j'avais pas fait attention mais, il y a bien une redirection mais effectivement, il part à la racine et du coup ne trouve pas le fichier maintenance.php... Mais bon il y a quand même une redirection...

Je précise aussi que la variable GET "divers" n'est pas à tous les coup présente (mais "lang" oui).

Mais j'ai essayé ton htaccess sur une page ayant le "divers" mais la réécriture ne fonctionne quand même pas...

pour tester avec uniquement le code de base, essayes d'accéder à http://127.0.0.1:8888/MONDOSSIERSITE/fr/page.php?divers=xxx. Si ça fonctionne, tu es censé obtenir exactement le même contenu que http://127.0.0.1:8888/MONDOSSIERSITE/page.php?lang=fr&divers=xxx

J'ai testé la première url et ça fonctionne mais les images n'apparaissent pas ... donc je n'obtiens pas exactement le même contenu que la 2eme ...

Merci de votre aide
 
WRInaute passionné
@Giustino
Je l'informe.
Toi, quand tu vois un type se gourer... tu le laisse pensant qu'il sait mais qu'il l'a fait exprès ?

Pas moi.
Ca m'a pris 10s, une ligne et ça l'a peut-être aidé.
Y a pas à chercher à chipoter.
 
WRInaute discret
@Koxin-L.fr
Pas de problème, ce n'était pas une remarque négative envers toi mais plutôt pour ne pas embrouiller benthebest et se concentrer d'abord sur l'essentiel du sujet.

benthebest a dit:
Oop, j'avais pas fait attention mais, il y a bien une redirection mais effectivement, il part à la racine et du coup ne trouve pas le fichier maintenance.php... Mais bon il y a quand même une redirection...

Ok, cela confirme donc bien que le rewriting est activé.

benthebest a dit:
Je précise aussi que la variable GET "divers" n'est pas à tous les coup présente (mais "lang" oui).

Ce n'est pas un problème, il suffit d'adapter le code htaccess à ce cas-là.

benthebest a dit:
Mais j'ai essayé ton htaccess sur une page ayant le "divers" mais la réécriture ne fonctionne quand même pas...

J'ai testé la première url et ça fonctionne mais les images n'apparaissent pas ... donc je n'obtiens pas exactement le même contenu que la 2eme ...

Donc en somme ça fonctionne ! Pour régler le problème des images qui ne s'affichent pas (le css en général, en fait), il faut ajouter ceci dans ton code html (juste après la balise <head>):

Code:
<base href="http://127.0.0.1:8888/MONDOSSIERSITE/" />

Comme par magie, tout s'affichera normalement. Ceci étant fait, cela signifie que ton nouveau format d'url pointe bien sur l'ancien format et affiche donc bien le même contenu.
Tu peux donc regarder le tutoriel dont je t'ai donné le lien précédemment, afin d'implémenter la technique contre le duplicate content et les boucles de redirection.

Ah oui, j'oubliais ! Pour le cas où tu n'as pas de paramètre GET "divers"... ceci devrait fonctionner:

Code:
RewriteEngine on
RewriteBase /MONDOSSIERSITE

RewriteCond     %{QUERY_STRING}     ^divers=(.+)$
RewriteRule      ^([a-z]{2})/(.+).php$     $2.php?lang=$1&divers=%1 [L]
RewriteRule      ^([a-z]{2})/(.+).php$     $2.php?lang=$1 [L]
 
Haut