détection des variables vides

Nouveau WRInaute
Bonjour

J'ai une adresse de ce style :
Code:
url.php?var1=coucou&var2=hello&var3=bye

J'utilise le rewriting pour mettre mon adresse ce cette forme :
Code:
url-coucou-hello-bye.php

Mais il peut arriver que mon adresse se retrouve avec une variable vide(var1, var2 ou var3)
Je souhaiterais donc détecter si les variables sont vides et donc ne pas écrire les variables vides.

Je voudrais éviter de réécrire toutes les possiblilités
Code:
RewriteEngine on=
RewriteRule url-(.+)-(.+).php$  url.php?var1=$1&var2=$2 [QSA]
RewriteRule url-(.+)-(.+).php$  url.php?var2=$2&var3=$3 [QSA]
RewriteRule url-(.+)-(.+)-(.+).php$  url.php?var1=$1&var2=$2&var3=$3 [QSA]
....

Comment puis je faire?

Merci de vos réponses

edit: titre changé
 
WRInaute accro
Re: problème RewriteCond %{QUERY_STRING}

Euh comment peux-tu savoir si quand tu as 2 valeurs, la seconde correspond à var2 ou var3 ?

Tu ne peux pas ! Il faut utiliser un autre système. Une seule variable (par ex. "url-var1+var2+var3" ou "url,var1-var2-var3") où la valeur correspond à la chaîne de caractères qui suit le premier séparateur. Puis ensuite traiter cette chaîne (typiquement avec un split si tu utilises PHP) au niveau de ton code.
 
Nouveau WRInaute
C'est à dire, je ne comprends pas.

Tu me dis que le rewriting ne permet pas de détecter si c'est une variable plutôt qu'une autre?

je ne peux pas utiliser du php puisque je suis dans le htaccess. Sinon çà me simplifierait beaucoup la vie :wink:
 
WRInaute accro
Ben si tu réécris tes pages comme tu l'as décrit, tu peux donc avoir :

url-var1-var2-var3.php
url-var1-var2.php
url-var1-var3.php
url-var2-var3.php

On est d'accord ?

Arrivé là, comment fais-tu pour savoir que la première c'est var1 ou var 2 ? Et que la deuxième c'est var2 ou var 3 ? Ben tu peux pas ;)

Tu ferais donc mieux d'avoir des URL réécrites ainsi :
url,var1-var2-var3-var4-var5-var6-var7-var8.php (je prends un cas totalement tordu exprès, avec énormément de combinaisons)

Dans ton script PHP, ta variable aura donc la valeur texte "var1-var2-var3-var4-var5-var6-var7-var8". Sur cette valeur, il te suffira de faire un "split" (voir la fonction PHP) pour retrouver tes valeurs dans un tableau !

C'est assez simple non ?
 
WRInaute accro
Ou alors passer par une autre URL pour y joindre des sortes de "clé" qui pourront te permettre de voir si les paramètres sont passés :

/url-1,coucou-2,hello-3,bye.php
si il en manque une, "hello" par exemple, ca donnera
/url-1,coucou-2,-3,bye.php

et donc
RewriteRule url-1,(.+)-2,(.+)-3,(.+).php$ url.php?var1=$1&var2=$2&var3=$3 [QSA]

c'est un peu moins "sexy" côté URL mais je suis pas sur que les internautes Lambda soient très attentifs à ça.
 
Nouveau WRInaute
@cedric_g

Je pensais que l'url writing état plus intelligent que cela et qu'il arrivait à retenir les variables qu'il avait modifié.

Je suis d'accord avec toi pour le split malgré que je trouve étrange d'en faire pour récupérer des variables passées en GET.
Mais imagine que var3 et var5 soit vide, l'url deviendrait alors
Code:
url,var1-var2--var4--var6-var7-var8.php
Ce qui n'est donc pas vraiment très joli du point de vue de l'url.

@nickargall

Ton idée est intéressante mais comme tu le dis ce n'est pas très joli.
Je vais donc essayer de trouver pour l'instant une autre solution
 
Nouveau WRInaute
A défaut de pouvoir détecter dans la RewriteRule la bonne variable, ne serait il pas possible de détecter quels sont les variables dans l'url. C'est à dire s'il a var1 var2 ou var3 avec RewriteCond %{QUERY_STRING}.
par exemple
Code:
RewriteCond %{QUERY_STRING} var1
RewriteCond %{QUERY_STRING} var2
RewriteRule url-(.+)-(.+).php$  url.php?var1=$1&var2=$2 [QSA]

ou

RewriteCond %{QUERY_STRING} var1
RewriteCond %{QUERY_STRING} var3
RewriteRule url-(.+)-(.+).php$  url.php?var1=$1&var3=$2 [QSA]

Je ne suis pas sur que cela marche et de la syntaxe.
N'hésitez pas à me corriger sur la syntaxe.
 
Nouveau WRInaute
je ne ferais pas des up si cela marchait ;)

Tu peux sans doute m'expliquer comment marche RewriteCond %{QUERY_STRING}.
Impossible de faire marche une seule rewriting avec çà.
 
Discussions similaires
Haut