Problème d'Url Rewriting

Nouveau WRInaute
Bonjour,
Alors voilà, ceci est mon premier message sur ce forum, mais pas ma première visite. J'ai lu et appris beaucoup de chose, sans pour autant mettre inscrit auparavant, mais voici le cap franchit.
Je viens vous voir car j'ai un problème avec l'Url Rewriting concernant mon site. Voici le contenu de mon .htaccess :
Code:
RewriteEngine on
RewriteEngine on
RewriteRule ^([0-9a-zA-Z-]+)\.html$ /index.php?cat=$1 [L]
RewriteRule ^([0-9a-zA-Z-]+)-([0-9a-zA-Z-]+)\.html$ /index.php?cat=$1&p=$2 [L]
Cela fonctionne correctement pour la premiere règle, mais pas pour la deuxième. Par contre, si je supprime la première règle, la deuxième fonctionne ... C'est à ne plus rien y comprendre :p
Donc voilà, si une ame charitable pouvait m'éclaircir sur ce point, je lui en serait très reconnaissant ;)
 
WRInaute impliqué
Bonjour et bienvenue à toi sur WRI,

Pour cas, je pense qu'il te suffit juste d'inverser tes 2 règles.
 
WRInaute passionné
Dans le cas de l'URL rewrit,
il faut toujours mettre les URL ayant le plus de parametre en premier puis dans l'ordre decroissant.
 
Nouveau WRInaute
Merci de l'explication.

Par contre, j'ai un autre problème. Tout fonctionne bien, du moment que mes $_GET ne contiennent pas de tirets.

C'est à dire que index.php?cat=accueil deviant bien accueil.html, mais je ne sais pas ce que devient indec.php?cat=qui-sommes-nous :s en testant qui-somme-nous.html cela ne fonctionne pas.

J'ai toujours :
Code:
RewriteEngine on
RewriteRule ^([0-9a-zA-Z-]+)-([0-9a-zA-Z-]+)\.html$ /index.php?cat=$1&p=$2 [L]
RewriteRule ^([0-9a-zA-Z-]+)\.html$ /index.php?cat=$1 [L]
 
WRInaute impliqué
Bonjour,

C’est normal que ça ne fonctionne pas des tirets dans tes paramètres puisque tu utilises aussi le tiret comme separateur.

Exemple pour ta 1ere regle tu peux avoir :

$1 = qui
$2 = sommes-nous

ou

$1 = qui-sommes
$2 = nous

Le serveur ne peut pas savoir ce que tu veux, parce que tu lui dis separe qd tu vois 1 tiret, dans ton cas, il y en a plusieurs. Le plus simple serait une regle ou tu utilise un autre separateur, par exemple, la virgule.

Code:
RewriteRule ^([0-9a-zA-Z-]+),([0-9a-zA-Z-]+)\.html$ /index.php?cat=$1&p=$2 [L]

Bien n'oublie pas de changer tes liens dans tes pages html :wink:
 
Nouveau WRInaute
Ah oui en effet :)
Par contre, l'utilisation de virgule n'est il pas moins bénéfique que l'utilisation de tiret pour ce qui est référencement ?
 
Nouveau WRInaute
Ok,
Par contre, une petite question. Dois-je "url-rewriter" mes pages erreurs ?

Car j'ai ceci actuellement :

Code:
RewriteEngine on
RewriteRule ^([-0-9a-zA-Z]+),([-0-9a-zA-Z]+)\.html$ /index.php?cat=$1&p=$2 [L]
RewriteRule ^([-0-9a-zA-Z]+)\.html$ /index.php?cat=$1 [L]
ErrorDocument 401 /index.php?cat=erreur&id=401
ErrorDocument 403 /index.php?cat=erreur&id=403
ErrorDocument 404 /index.php?cat=erreur&id=404
ErrorDocument 406 /index.php?cat=erreur&id=406
ErrorDocument 500 /index.php?cat=erreur&id=500
ErrorDocument 503 /index.php?cat=erreur&id=503

Les réecrire apporterait-il un plus ou pas ?
 
WRInaute occasionnel
Laike a dit:
Ah oui en effet :)
Par contre, l'utilisation de virgule n'est il pas moins bénéfique que l'utilisation de tiret pour ce qui est référencement ?

La virgule n'est pas moins bénéfique. C'est un séparateur comme un autre.

En revanche, et personnellement, je préfère l'utiliser uniquement pour séparer les mots des chiffres. Ca fait un peu plus propre.

Les sites de Lemonde.de et Amazon sont rewrittés avec des tirets bas et des virgules. Je pense qu'il s'agit quant même de deux belles références en matières d'optimisation et de SEO.

En espérant avoir pu aider.

Bonne journée à tous et à toutes sur WRI

La Fanette.
 
Nouveau WRInaute
Une petit question encore. J'ai :
Code:
RewriteEngine on
RewriteRule ^([-0-9a-zA-Z]+),([-0-9a-zA-Z]+)\.html$ /index.php?cat=$1&p=$2 [L]
RewriteRule ^([-0-9a-zA-Z]+),([-0-9a-zA-Z]+)\.html$ /index.php?cat=$1&id=$2 [L]
RewriteRule ^([-0-9a-zA-Z]+)\.html$ /index.php?cat=$1 [L]
Mais la règle avec le cat et l'id ne m'as pas l'air d'être pris en compte. Une idée ?
 
WRInaute impliqué
Ca ne peut pas fonctionner, la regle 1 et la regle 2 sont les memes !!!
Fait plutot qqchose de ce genre :

Code:
RewriteRule ^([-0-9a-zA-Z]+),p([-0-9a-zA-Z]+)\.html$ /index.php?cat=$1&p=$2 [L] 
RewriteRule ^([-0-9a-zA-Z]+),([-0-9a-zA-Z]+)\.html$ /index.php?cat=$1&id=$2 [L]

Ca reste juste un exemple.....
 
Discussions similaires
Haut