Aide Svp, pour Petite ré écriture d'URL

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

bonjour, je souhaiterai un peu d'aide svp, pour une ré écriture d'url que je n'arrive pas à faire fonctionner. Je souhaiterai que cette URL:

1
http://localhost/site/index?lang=en

Soit comme ceci

1
http://localhost/site/index/lang=en

J'ai essayé cette règle :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
Options +FollowSymLinks -MultiViews
RewriteEngine on

# Enlever les extensions ".php"
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^[^.]+$ $0.php [L]
RewriteCond %{ENV:REDIRECT_STATUS} =""
RewriteRule (.+)\.php$ $1 [L,R=permanent]

# Voci la règle que je n'arrive pas à faire marcher :
RewriteRule ^index/lang=en$ index?lang=en [L]

Comment ça se fait que ça ne fonctionne pas? Merci beaucoup

+0 -0

A mon avis, ça ne marche pas parce que tu indiques avec le flag L que c'est la dernière règle à suivre. Les règles au-dessus qui rajoutent le .php ne sont donc pas exécutées.

Donc de deux choses l'une, soit tu enlèves le flag L, soit tu précises index.php au lieu de simplement index. La deuxième sera légèrement plus performante puisqu'apache ne fera pas un deuxième tour des règles de réécriture.

Ma plateforme avec 23 jeux de société classiques en 6 langues et 13000 joueurs: http://qcsalon.net/ | Apprenez à faire des sites web accessibles http://www.openweb.eu.org/

+0 -0
Auteur du sujet

A mon avis, ça ne marche pas parce que tu indiques avec le flag L que c'est la dernière règle à suivre. Les règles au-dessus qui rajoutent le .php ne sont donc pas exécutées.

Donc de deux choses l'une, soit tu enlèves le flag L, soit tu précises index.php au lieu de simplement index. La deuxième sera légèrement plus performante puisqu'apache ne fera pas un deuxième tour des règles de réécriture.

Ok merci, je viens d'essayer tes 2 solutions, mais aucune des 2 fonctionne.

QuentinC

+0 -0

Bonjour

Outre ce qu'a dit QuentinC, il n'y a pas de parenthèses capturantes pour récupérer la langue, et, après quelques tests , il s'avère que les Query strings (après le ? donc) requiert un traitement particulier. Donc, toujours dans le testeur de règles indiqués en lien, cette règle

1
2
3
RewriteEngine on
RewriteCond %{QUERY_STRING} lang=(.*)
RewriteRule ^index.php /index/lang=%1 [L]

transforme donc cet URLhttp://hostname/index.php?lang=en en celle là http://hostname/index/lang=en

Édité par bendia

+0 -0
Auteur du sujet

Ok merci. Mais je n'arrive pas à y faire fonctionner. quand je met ceci:

1
2
3
4
RewriteEngine on

RewriteCond %{QUERY_STRING} lang=(.*)
RewriteRule ^index.php /index/lang=%1 [L]

9a m'écrit cette erreur: The requested URL /_ultram/post_page was not found on this server.

Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.

+0 -0
Auteur du sujet

ok merci. mais ça ne marche pas. erreur 404… je précise que je veux ceci:

1
http://localhost/_ultram/index/lang=en

au lieu de ceci :

1
http://localhost/_ultram/index?lang=en

(enlever le dernier "?", et mettre un "/" à la place) merci

Édité par stephweb

+0 -0

je précise que je veux ceci:

1
http://localhost/_ultram/index/lang=en

au lieu de ceci :

1
http://localhost/_ultram/index?lang=en

(enlever le dernier "?", et mettre un "/" à la place) merci

stephweb

Ben j'avais compris l'inverse :-°

1
RewriteRule ^(.*?)index/lang=(.*) $1index?lang=$2 [L]

Il faut malgré tout encore faire attention à ce qu'a dit QuentinC si ton premier jeu de règle doit être appliqué

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte