Tiret et URL rewriting

Nouveau WRInaute
Bonjour,
J'ai un petit souci concernant une des règles de mon htaccess.

Code:
RewriteRule ^(.+)-(.+)\.html$ /index.php?page=$1&cat=$2 [L]

J'aimerai utiliser le tiret comme séparateur mais il arrive que le paramètre "cat" contienne déjà un tiret (ex : photo-numerique).

Du coup la règle ne fonctionne pas.
Y a t-il un moyen pour que la règle ne prenne pas en compte le tiret du paramètre ?

Ou sinon, existe t-il un autre séparateur aussi efficace (chez google et les autres moteurs) que le tiret ?

Merci.
 
Nouveau WRInaute
Merci pour cette réponse brève :) et pour cette liste de séparateurs "compatibles".

Je me permets d'insister concernant ma première question :

Y a t-il un moyen pour que la règle ne prenne pas en compte le tiret du paramètre ?
Peut-on mettre du PHP dans un htaccess pour cela ?
 
WRInaute passionné
webcrea a dit:
Peut-on mettre du PHP dans un htaccess pour cela ?
Non.
Y a t-il un moyen pour que la règle ne prenne pas en compte le tiret du paramètre ?
Au lieu de lui dire que le premier paramètre est "n'importe quoi" . "avec au moins un caractère" +
tu n'as qu'à lui dire que c'est
"n'importe quoi sauf un tiret" [^-] "avec au moins un caractère" +
 
Nouveau WRInaute
J'ai tenté plusieurs choses en fonction de ton explication mais ça ne donne rien. Peux tu concrétiser ton explication STP Dj_Apx ?

Merci.
 
Nouveau WRInaute
Code:
RewriteRule ^-(.+)-(.+)\.html$ /index.php?page=$1&cat=$2 [L]
RewriteRule ^(^-+)-(.+)\.html$ /index.php?page=$1&cat=$2 [L]
RewriteRule ^(.+)-(^-+)\.html$ /index.php?page=$1&cat=$2 [L]
...

Oui je tatonne un peu :?

Avec la 1ère régle tout fonctionne excepté les URL du type 3-photo-numerique.html
 
Nouveau WRInaute
Rectification, c'est avec cette ligne que tout fonctionne excepté les URL du type 3-photo-numerique.html (4-photo.html par exemple fonctionne)

Code:
RewriteRule ^(.+)-(.+)\.html$ /index.php?page=$1&cat=$2 [L]
 
Nouveau WRInaute
Je récapitule, ce sera j'espère plus clair :)

Voici les règles d'URL rewriting de mon htaccess pour le moment :

Code:
RewriteRule ^-(.+)-(.+)\.html$ /index.php?page=$1&cat=$2 [L]
RewriteRule ^(.*)\.html$ /index.php?cat=$1 [L]

Avec "^-" dans la 1ère ligne, les URL du type "photo.html" et "photo-numerique.html" fonctionne mais pas "3-photo.html" et encore moins "3-photo-numerique.html".

Avec juste "^" dans la 1ère ligne, "photo-numerique.html" ne fonctionne plus, "3-photo-numerique.html" ne fonctionne toujours pas mais "3-photo.html" fonctionne (et photo.html aussi).

Désolé pour cette explication un peu lourde.
Quelle est la solution pour quer toute les URL fonctionnent avec le tiret ?
 
WRInaute passionné
Relis mon explication, j'ai rectifié un oubli, maintenant si tu repars de ta première règle et de ce que j'ai écrit ça devrait marcher ;)
 
Nouveau WRInaute
C'est mieux !
Tout est PRESQUE bon avec cette modif dans la 1ère ligne

Code:
RewriteRule ^([^-]+)-(.+)\.html$ /index.php?page=$1&cat=$2 [L]
RewriteRule ^(.+)\.html$ /index.php?cat=$1 [L]

Tout fonctionne

photo.html
3-photo.html
3-photo-numerique.html

sauf
photo-numerique.html

Le pb se situe dans la 2ème ligne ?
 
WRInaute passionné
Non.
Si page ne peut être qu'un chiffre, alors ton problème a une solution.

MAIS si page peut être un mot, alors comment ferais tu pour accéder à la page "photo" de la catégorie "numérique" ? il y aurait confusion.

Bon, dans le cas où page est toujours un chiffre, alors, au lieu de dire que page est "n'importe quoi sans tiret" [^-] "au moins une fois" +
il faut dire que page est "un chiffre de 0 à 9" [0-9] "au moins une fois" +
Et là pas de confusion possible ;)
 

➡️ 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