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

a marqué ce sujet comme résolu.

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

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.

+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.

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

QuentinC

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

+0 -0

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.

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é

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

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