8768 sujets

Développement web côté serveur, CMS

Bonjour,
J'ai trouvé 36 façons de réécrire dans 36 cas différents, mais rien ne semble correspondre vraiment.

je voudrais réécrire les url de cette façon :

lang=fr&page=Region 					    => fr-Region
lang=fr&page=Region&rubrique=Restaurants             => fr-Région-Restaurants
lang=fr&page=Region&commerce=L'aile ou la cuisse => fr-Région-L'aile ou la cuisse
lang=fr&page=Checkcookie&origine=Région 	            => fr-Checkcookie-Région


Voici le .HTACCESS:

Options +FollowSymlinks
RewriteEngine On

#RewriteCond %{QUERY_STRING} ^[#blue]lang[/#]=(.*)&[#red]page[/#]=(.*]+)$
RewriteRule ^([a-z]+)-([a-zA-Z\s]+)\.html$ index.php?[#red]lang[/#]=$1&[#red]page[/#]=$2 [NC,L]

#RewriteCond %{QUERY_STRING} ^[#red]lang[/#]=(.*)&[#red]page[/#]=(.*]+)&rubrique=(.*)$ 
RewriteRule ^([a-z]+)-([a-zA-Z\s_]+)-([a-zA-Z\sí_]+)\.html$ index.php?[#red]lang[/#]=$1&[#red]page[/#]=$2&[#red]section[/#]=$3 [NC,L]

#RewriteCond %{QUERY_STRING} ^[#red]lang[/#]=(.*)&[#red]page[/#]=(.*)&commerce=(.*)$ 
RewriteRule ^([a-z]+)-([a-zA-Z\s_]+)-([a-zA-Z\sí_]+)\.html$ index.php?[#red]lang[/#]=$1&[#red]page[/#]=$2&[#red]commerce[/#]=$3 [NC,L]

#RewriteCond %{QUERY_STRING} ^[#red]lang[/#]=(.*)&[#red]page[/#]=(.*)&origine=(.*)$
RewriteRule ^([a-z]+)-([a-zA-Z\s_]+)-([a-zA-Z\s]+)\.html$ index.php?[#red]lang[/#]=$1&[#red]page[/#]=$2&[#red]origine[/#]=$3 [NC,L]


Sans les Rewritecond ( ici désactivées ) les RewriteRule 1 et 2 fonctionnent, mais si j'envoie l'url qui correpond aux RewriteRule n°3 ou n°4, la requête sur la BD foire car c'est le paramètre section
qui est pris en compte et non commerce ou origine.

Si j'active les RewriteCond plus rien ne fonctionne. j'ai essayé un tonne de trucs pendant 2 jours : changer les $n en %n dans les RewriteRule; ne rechercher dans la QUERY_STRING que la variable différente : ex: ^section$ ou ^commerce$. etc...

Je ne suis pas sur la bonne piste?

Merci
Modifié par Tropiques (25 Jun 2014 - 17:15)
Bonjour,

Personnellement j'ai depuis longtemps adopté un framework PHP pour faire gérer ce genre de choses sans encombre, Symfony et Zend gère parfaitement le routage, il suffit de taper directement l'url souhaitée.

Bon courage, je ne saurai t'aider sur ce point si ce n'est te conseiller de ne pas vouloir réinventer la roue.
Modifié par ohweb (25 Jun 2014 - 14:56)
Bonjour,

Si j'ai ben compris l'énoncé, (sinon, il faut le reformuler),
avec un peu de recul je pense qu'il n'y a pas de solution.
En effet, étant donné l'énoncé du problème, pourquoi le libellé 'Restaurants' correspondrait-t'il plus à une rubrique qu'à un commerce ou une origine ? (idem pour L'aile ou la cuisse)

Il y a aussi une autre bizarrerie : 'rubrique' dans l'énoncé, 'section' dans la solution.

Aussi, je modifie les URL de départ, qui seraient :
=> fr-Région
=> fr-Région-rubrique-Restaurants
=> fr-Région-commerce-L'aile ou la cuisse
=> fr-Checkcookie-origine-Région

Auquel cas, je ferai :
(l'ordre est très important, et le drapeau [L] signifie que si la règle correspond, il faut stopper l'interprétation, donc il faut le mettre sur toutes les lignes, toujours si j'ai bien compris la question...)

RewriteEngine On
RewriteRule ^([a-z]+)-rubrique-([a-zA-Z\s_]+)-([a-zA-Z\sí_]+)\.html$  /index.php?lang=$1&page=$2&rubrique=$3 [NC,L]
RewriteRule ^([a-z]+)-([a-zA-Z\s_]+)-commerce-([a-zA-Z\sí_]+)\.html$  /index.php?lang=$1&page=$2&commerce=$3 [NC,L]
RewriteRule ^([a-z]+)-([a-zA-Z\s_]+)-origine-([a-zA-Z\sí_]+)\.html$  /index.php?lang=$1&page=$2&origine=$3 [NC,L]
RewriteRule ^([a-z]+)-([a-zA-Z\s]+)\.html$    /index.php?lang=$1&page=$2 [NC,L]
@jlon

Merci pour ta remarque, oui c'est bien rubrique qu'il faut lire ( j'ai corrigé) , l'erreur est due au fait que j'ai traduit en français pour publier la question.

Pour le reste :

fr-Région : donne des infos touristiques générales sur la région
fr-Région-rubrique-Restaurants : donne la liste de tous les restaurants de la région
fr-Région-commerce-L'aile ou la cuisse : en cliquant sur l'un des commerces de la liste
fr-Checkcookie-origine-Région : juste utilisé pour la traduction dans d'autres langues et retomber sur la même page et non sur l'index.

En ce qui concerne [L] tu as raison, je m'en suis rendu compte entretemps.

Nette amélioration depuis que j'ai mis les RewriteRules dans l'ordre où tu le préconise. ( Mais sans le slash avant index.php ). J'ai aussi ajouté óéñáúï pour que ces lettres accentuées soient détectées.


Reste que certaines requêtes sur certains commerces fonctionnent mais pas d'autres: exemple;
Centre de beauté Miosoti2 fonctionne et pas Centre de beauté Miosoti
=> la requête part sur rubrique et pas sur commerce

@FraiseTagada99

Je ne comprends pas pourquoi tu dis que les trois règles sont identiques, les 3 derniers paramètres étant différents ( commerce != rubrique != origine)

Merci
Modifié par Tropiques (25 Jun 2014 - 18:43)
Bon , je pense que la question est :

comment détecter les paramètres

commerce
rubrique
ou
origine

de façon à réécrire l'URL selon le paramètre qui la différencie des autres

Quelqu'un a-t-il une piste ?
Modifié par Tropiques (25 Jun 2014 - 21:24)
Tropiques a écrit :

@FraiseTagada99

Je ne comprends pas pourquoi tu dis que les trois règles sont identiques, les 3 derniers paramètres étant différents ( commerce != rubrique != origine)


a écrit :

#RewriteCond %{QUERY_STRING} ^lang=(.*)&page=(.*]+)&rubrique=(.*)$
RewriteRule ^([a-z]+)-([a-zA-Z\s_]+)-([a-zA-Z\sí_]+)\.html$ index.php?lang=$1&page=$2&section=$3 [NC,L]

#RewriteCond %{QUERY_STRING} ^lang=(.*)&page=(.*)&commerce=(.*)$
RewriteRule ^([a-z]+)-([a-zA-Z\s_]+)-([a-zA-Z\sí_]+)\.html$ index.php?lang=$1&page=$2&commerce=$3 [NC,L]

#RewriteCond %{QUERY_STRING} ^lang=(.*)&page=(.*)&origine=(.*)$
RewriteRule ^([a-z]+)-([a-zA-Z\s_]+)-([a-zA-Z\s]+)\.html$ index.php?lang=$1&page=$2&origine=$3 [NC,L]