Problème d'url Rewriting avec des variables

Sadei

Nouveau WRInaute
Bonjour à vous,

Je ne connais vraiment pas grand chose (pour ne pas dire rien) en URL Rewriting, il est donc fort probable que j'ai écrit plus ou moins n'importe quoi...

Je cherche à modifier 3 liens sur mon site, qui ne possède qu'une seule page : index.php.

J'ai des liens qui se présentent de cette façon :
- www.monsite.com/index.php
- www.monsite.com/index.php?theme=bijoux&dossier=bagues
- www.monsite.com/index.php?contact=1

Et j'aimerai qu'ils s'affichent comme ceci :
- www.monsite.com
- www.monsite.com/bijoux/bagues
- www.monsite.com/contact


J'ai essayé ce code...

Options +FollowSymlinks
RewriteEngine On

RewriteRule ^index.php$ / [L,R=301]
RewriteRule ^index.php?theme=$1&dossier=$2$ /$1/$2 [L]
RewriteRule ^index.php?$1=1$ /$1 [L]

J'arrive à supprimer le 'index.php' de chacun de mes liens (même si je comprend pas tout à fait pourquoi je dois faire une redirection permanente pour que ça marche), mais le reste ne suit pas, par exemple:
- au lieu d'avoir www.monsite.com/contact
- j'ai www.monsite.com/?contact=1


Merci d'avance pour vos réponses.
 

Giustino

WRInaute discret
Tu as fait la logique à l'envers.
Mettons pour l'instant de côté le fait que l'index.php ne peut être accédé directement...

Code:
RewriteEngine on
RewriteBase /

RewriteRule   ^contact$              index.php?contact=1 [L]
RewriteRule   ^bijoux/bagues$   index.php?theme=bijoux&dossier=bagues [L]

Résultat, les urls suivantes sont accessibles:
- http://www.tonsite.com/contact
- http://www.tonsite.com/bijoux/bagues

Ajoutons maintenant le fait qu'on ne puisse pas accéder à index.php directement (en évitant bien sûr les boucles de redirection - plus d'info ici: https://www.webrankinfo.com/forum/t/tutoriel-eviter-les-boucles-de-redirection.168006/).

Code:
RewriteEngine on
RewriteBase /

RewriteRule   ^contact$   index.php?contact=1 [E=END:1,L]
RewriteRule   ^bijoux/bagues$   index.php?theme=bijoux&dossier=bagues [E=END:1,L]

RewriteCond   %{ENV:REDIRECT_END}   !^1$
RewriteRule   ^index.php$   / [R=301,L]

Résultat identique au précédent avec en plus l'interdiction d'accéder directement à index.php.

Enfin, cette dernière étape n'est pas nécessaire mais permet d'éviter le duplicate content: empêcher l'accès à tes anciennes urls de sorte qu'il n'y ait pas plusieurs urls pour un même contenu.

Code:
RewriteEngine on
RewriteBase /

RewriteRule   ^contact$   index.php?contact=1 [E=END:1,L]
RewriteRule   ^bijoux/bagues$   index.php?theme=bijoux&dossier=bagues [E=END:1,L]

RewriteCond   %{ENV:REDIRECT_END}   !^1$
RewriteCond   %{QUERY_STRING}   ^contact=1$
RewriteRule   ^index.php$   contact [R=301,L]

RewriteCond   %{ENV:REDIRECT_END}   !^1$
RewriteCond   %{QUERY_STRING}   ^theme=bijoux&dossier=bagues$
RewriteRule   ^index.php$   bijoux/bagues [R=301,L]

RewriteCond   %{ENV:REDIRECT_END}   !^1$
RewriteRule   ^index.php$   / [R=301,L]

Voilà, rapidement sans grande optimisation, ceci devrait faire l'affaire pour ton problème.
 

Discussions similaires

Haut