Paramètres optionnels?

Nouveau WRInaute
Commencons par le commencement :

Bonjour ... :D

Bon, je suis néophyte de l'url rewriting, j'arrive juste à bidouiller à partir de conditions existantes, mais je me trouve face à quelque chose qui me semble simple dans la logique mais compliqué quand on y connait pas grand chose.

En fait j'ai un site basé sur une structure de page principale : -structure.php

Ensuite j'y insère des includes pour les différents contenus :
-listing.php pour les listing de produits par catégorie(2 variables nécessaire, la catégorie, le numéro de la page à afficher)
-produit.php pour l'affichage d'une fiche produit (3 variables, la catégorie, la page et le produit)

J'utilise donc :
Code:
RewriteRule ^(.*)_(.*)_(.*)_(.*)\.(.*)$ structure.php?include=$1&categorie=$2&page=$3&produit=$4 [L]

Donc pour l'affichage d'une catégorie, je lui indique par exemple:
listing_2_3_.html (include listing, catégorie 2, page 3)
et pour un produit :
produit_2_3_6.html (include produit, catégorie 2, page 3, produit 6)

Je passe toujours mes paramètres dans le même ordre :

J'aurai donc voulu qu'il soit tous optionnels, c'est à dire pouvoir écrire par exemple :

listing_2.html ou listing_2_3. html sans tenir compte des paramètres inutiles pour cette page.

J'arriverai à le bidouiller en plusieurs lignes genre :

Code:
RewriteRule ^(.*)_(.*)_(.*)_(.*)\.(.*)$ structure.php?include=$1&categorie=$2&page=$3&produit=$4 [L]
RewriteRule ^(.*)_(.*)_(.*)\.(.*)$ structure.php?include=$1&categorie=$2&page=$3 [L]
RewriteRule ^(.*)_(.*)\.(.*)$ structure.php?include=$1&categorie=$2 [L]
etc...

Mais ca ne me parait pas très propre, et j'aimerai autant prodfiter de cette occasion pour apprendre qq chose.

J'espère m'être exprimé correctement ...

Merci d'avance.
 
WRInaute discret
Je ne sais pas si on peut bidouiller des conditions dans le .htaccess

Mais sinon tu peux peut être passer des paramètres 'vides" avec un caractère spécial par exemple ici 0:

listing_2_3_0.html (include listing, catégorie 2, page 3, pas de produit)
Listing_2_0_0.html (include listing, categorie 2, pas de page, pas de produit)
Listing_0_2_0.html (include listing, pas de categorie, page 2, pas de produit)

même principe pour les produits

rem: il parait qu'il vaut mieux mettre des" -" plutot que des" _" dans les urls, voir articles sur ce sujet sur Webrankinfo

A+

Pierre
 
Nouveau WRInaute
oui je suis d'accord, mais ca reviens au même que ne rien mettre comme je le fais actuellement :listing_2_3_.html (listing_2_3_(3°paramètre).html)

Mais dans le cas présent, cette possibilité me rendrait service, même si elle est contournable.

Pour le séparateur, je ne sais pas trop car sur ce forum certains disent que le "-" n'est pas pris en compte par certains moteurs comme msn il me semble. Alors qui croire et que choisir ?
 
Nouveau WRInaute
Bon en fait j'ai trouvé une solution :
Code:
RewriteRule ^([^_]*)[_]*([^_]*)[_]*([^_]*)[_]*([^_]*)\.(.*)$ structure.php?include=$1&categorie=$2&page=$3&produit=$4 [L]

Je ne pense qu'il dois y avoir plus simple, mais ca marche,

Je peux appeler : listing_2.htm ou listing_2_3.htm ou produit_2_3_6.htm et ca marche
 
WRInaute impliqué
voila un beau code: ;-)
RewriteRule /([a-z]+)_([0-9]+)_([0-9]+)_([0-9]+)\.html /structure.php?include=$1&categorie=$2&page=$3&produit=$4 [L,NC]
RewriteRule /([a-z]+)_([0-9]+)_([0-9]+)\.html /structure.php?include=$1&categorie=$2&page=$3 [L,NC]
RewriteRule /([a-z]+)_([0-9]+)\.html /structure.php?include=$1&categorie=$2 [L,NC]
 
Nouveau WRInaute
Merci beaucoup, mais c'est le même principe que ce que j'évoquais en titre et ca me parait moins pratique que la solution que j'ai trouvé juste avant.
 
Nouveau WRInaute
Bon suite aux conseils de 1000apps et aux explications contenues dans certains topic, j'ai pu voir que :

1) le "_" n'est pas une bonne solution car pas considéré comme un séparateur de mot

2) le "-" pose des problèmes de référencement avec certains moteurs s'il est utilisé plusieurs fois dans une seule chaine.

La solution est donc de virer les "_" et de mettre un seul "-" (ou éventuellement "_", je l'ai autorisé dans le code), j'ai donc gratté un peu pour faire ca (je le met au cas ou ca pourrait dépanner qqn d'autre.
Code:
RewriteRule ([^_-]+)([_-]+)([a-z]+)([0-9]+)([^&]*)(.*).(htm|html) $1$2$5$6&$3=$4.$7 [NC,N]
RewriteRule ^([^_-]+)([_-]+)(.*).(htm|html)$ structure.php?include=$1$3 [NC,L]

On peut balancer le nombre de variables qu'on veut dans l'ordre qu'on veut :

index.html
renverra
structure.php?include=index

listing-cat6page5a1b2c3.htm
renverra
structure.php?include=listing&cat=6&page=5&a=1&b=2&c=3

Seules contraintes:
- les noms de variables ne peuvent être que [a-z] (aucun chiffre ou caractère spécial)
- les variables ne peuvent être que numériques

PS : je me surprend moi même à avoir fait ce bout de code qui fonctionne, mais rassurez moi y'a aucune coquille ou autre liée à cette méthode ??? :?
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut