url rewriting et mot clé

WRInaute discret
Bonjour.

Voici mon problême et mes 3 questions,

J'ai un site avec des articles dont le rewriting ce fait avec le titre de l'article afin d'avoir mondomaine.com/le-titre-de-mon-article.html. Comme il est recommandé d'utiliser le "-" comme séparateur au lieu de "_" pour les moteurs et les mots clés c'est ce que j'ai fait. Mais un problême ce pose avec 2 articles qui ont le même titre. J'ai donc ajouté une variable id dans mon rewriting.

Maintenant c'est ici que j'ai besoin d'aide, dans ma règle, j'indique "-" pour séparer mes 2 variables mais je crois que le serveur est confu puisque dans la première variable (mon titre) j'ai plusieurs "-". J'obtients donc un erreur. Est-ce qu'il existe un moyen d'avoir comme url mondomaine.com/le-titre-de-mon-article-id?

À mon avis la réponse est non mais je suis pas un pro du rewriting. Donc si c'est vraiment non, j'ai pour l'instant résolu en séparant mes variables avec le "_" puisque de toute façon le id n'est pas un mot clé. Mais voici ma 2ième question, par exemble si j'ai un titre qui est Tournoi-de-Golf le mot golf est un important mot clé mais la j'obtiens mondomaine.com/Tournoi-de-Golf_34, est-ce que les moteurs liront quand même le mot clé Golf ou si pour eux le mot est Golf_34?

L'idéal serait de pouvoir garder mon url sans le _id, est-ce qu'il aurait un moyen de faire cela tout en passant ma variable id pour éviter le problême de 2 articles avec le même titres?

Mon .htaccess:
Code:
RewriteRule ^([^_]*)_([^_]*)\.php$  /article.php?url=$1&id_article=$2  [L]

Question bonus Lol, est-ce que c'est préférable de changer l'extension en .html ou je peux très bien garder le .php
Merci!
 
WRInaute discret
quelques pistes :

- utilise la "," comme séparateur pour ton id (si tu ne l'utilise pas ailleurs)
- ou ajoute simplement à la fin de ton en ?id=xx en gardant le transfert des query_string (via l'option QSA en fin de ligne de rewriting) ex:
Code:
RewriteRule source cible [QSA]

ainsi ton ?id= sera conservé de l'url xxx-xxx-xxx.html?id=xx vers pagephp.php?p1=xxx&p2=xxx&p3=xxx&id=xx

voiloù
 
WRInaute impliqué
Ou, tu peux noter que si "-" ne peut être utilisé comme séparateur pour l'id, et que "_" le peut, alors tu peux ajouter ce que tu veux, genre "-id" (tu aurais des url du type : titre-de-la-page-idXX.html)

Mais c'est avant tout une histoire d'ésthétique, le "_" le fait, si tu est certain qu'il ne risque pas d'apparaitre ailleurs.

++
 
WRInaute discret
Merci à tous!

Vous avez effectivement résolu mon problême, mais finalement j'ai changé le tout. Puisque mon but était d'éliminer le id dans mon URL afin d'avoir juste mes mots clés, j'ai donc décidé d'interdire d'avoir 2 articles avec le même titre. C'est un peu plus de travail puisque je dois d'abord vérifier si le titre existe mais je crois que c'est beaucoup mieux comme ça.

À mon avis c'est plus facile de ce souvenir d'une adresse avec juste le titre sans avoir à ce souvenir du id.
 
WRInaute impliqué
jusqu'au 10 000 ième article ;)

Après, cela risque de se sentir un peut les match string dans la db. Surtout que sans id, pas vraiment d'orde j'imagine, pas alphabetique du moins.

A peser je dirais, car si tu en arrive là, et qu'il te faut ajouter une id pour faire face, tu te retrouvera avec 100% de duplicates.

++
 
WRInaute discret
J'ai effectivement un id dans la bd que j'utilise pour la recherche, tout les articles trouvé ont un lien " titre-de-article.php " qui pointe sur article.php?url=$url.

J'ai maintenant un drole de problème avec mon RewriteRule.

Voici ce que j'ai :
Code:
RewriteEngine on
RewriteCond %{HTTP_HOST} !www.articlesgratuits.com$ 
RewriteRule (.*) http://www.articlesgratuits.com/$1 [QSA,L,R=301]
RewriteRule ^category-([^/]*)\.php$  /en/category.php?category_url=$1 [L]
RewriteRule ^([^/]*)\.php$  /en/article.php?url=$1 [L]

Le dernier RewriteRule fonctionne pas j'obtiens un erreur serveur 500, mais si je change
Code:
^category-([^/]*)\.php$
pour
Code:
^category-([^/]*)\.html$
ça fonctionne. Mais moi je veux conserver mon .php.

Est-ce que vous voyez ou est mon erreur?
J'ai utilisé ce site pour généré le RewriteRule http://www.mod-rewrite-wizard.com/
 
WRInaute impliqué
Ton problem est difficilement soluble à mon avis, comment rediriger *.php vers script.php sans que sa tourne en boucle?

C'est toute l'utilité du terme séparateur, si tu utilises "-id", encore un problème que tu n'aura pas, car la rewriterule se basera sur -id(0-9+)\.php

Après ily a peut être moyen en ajoutant une rewritecond, genre
Code:
RewriteCond %{REQUEST_URI} !^(.*)category\.php(.*)$

Et pareil pour tous tes script php du coup, il faut tous les sortir, et aussi, pas de titres se finissant par leur nom ;)

Mais encore une fois je penche pour un bon vieux séparateur et une bonne vielle id.

C'est pas vraiment ça qui va changer ton PR.

++
 
WRInaute discret
dcz a dit:
Ton problem est difficilement soluble à mon avis, comment rediriger *.php vers script.php sans que sa tourne en boucle?

j'ai cru aussi qu'il tournerait en boucle, mais en fait il redirige vers "/en/****" et son redirect impose que l'url "commence" par category donc ça doit pas poser de problèmes ;)
 
WRInaute discret
Oups j'ai fait une petite erreur.

C'est la dernière ligne qui fonctionne pas. le dernier rewriterule.

Code:
RewriteRule ^([^/]*)\.php$  /en/article.php?url=$1 [L]

Donc si je mets un .html c'est ok mais il n'aime pas le .php. Ça fonctionne même avec un .ph, .p .n'importe quoi mais pas .php. Et en effet si je me mets un séparateur et une 2ième variable comme un id, ça fonctionne. Je peux effectivement remettre mon id en place mais j'aimerais éviter le id, c'est pas vraiment pour le PR mais plus pour offrire aux visiteurs une URL plus facile à retenir.

Si j'ai pas le choix, bien je vais remettre le bon vieux id comme dcz dit si bien.
 
WRInaute discret
Je viens de faire de nouveaux tests.

Étant donné que mon premier RewriteRule fonctionne j'ai testé avec
Code:
RewriteRule ^article-([^/]*)\.php$  /en/article.php?url=$1 [L]

Et ça fonctionne, peut importe ce que je met comme séparateur sa fonctionne même juste un "-". Mais si je le laisse vide ça fonctionne pas.

j'obtients donc une adresse du genre -www.articlesgratuits.com/en/article-Le-Titre-de-larticle.php. J'ai donc 2 choix qui fonctionne et j'hésite quelle choisir. 1- Je mets le "article-" au début de mon titre ou 2- je me le "id" à la fin.

Je suis certain que dcz dira le #2 :wink:

Mais je comprends toujours pas pourquoi je peux pas avoir un RewriteRule sans séparateur pour une adresse du genre /en/Le-Titre-de-larticle.php

Haaaa! que c'est compliqué le URL Rewriting et .htaccess.
:cry:
 
WRInaute impliqué
T'as raison, mais comme tu as peut de chances d'avoir un article dont l'url finirait par "-.php" ou commencerait par "-", ça peut aussi marcher, mais d'un coup, là je trouve ça carrement moins joli que "-idXX.php" sans parler d'éfficacité au 10 000 ème article ;)


Et pourquoi tu mettrais pas html tout simplement si tu tiens tellement à ne pas avoir d'id?
Une bonne vielle rewriterule devrait le faire pour rediriger en 301 php$ vers html

++
 
WRInaute discret
Je suis d'accord avec toi, j'aime bien le -idxx.php mais ça fonctionne pas. Je crois que je peux pas mettre de "-" dans mon séparateur parce que j'ai déja des "-" dans mon url. J'ai donc opté pour le "_". Pour le .html bien puisque toutes mes pages sont en .php je préfère garder le .php.

Code:
RewriteEngine on
RewriteCond %{HTTP_HOST} !www.articlesgratuits.com$ 
RewriteRule (.*) http://www.articlesgratuits.com/$1 [QSA,L,R=301]
RewriteRule ^category-([^/]*)\.php$  /en/category.php?category_url=$1 [L]
RewriteRule ^([^_]*)_([^_]*)\.php$ /en/article.php?url=$1&id_article=$2 [L]

Si je mets
Code:
RewriteRule ^([^-id]*)-id([^-id]*)\.php$ /en/article.php?url=$1&id_article=$2
ça fonctionne pas.

Donc maintenant que avec le "_" tout fonctionne, j'ai créé mon sous domaine "en" pour la version anglaise -www.en.articlesgratuits.com et devinez quoi? ça fonctionne plus, pourtant mon .htaccess est dans le répertoire "en" avec comme path /en/category.php?category_url=$1

J'ai fait une recherche et je suis tombé sur ce poste qui semble avoir le même problême mais je comprends pas la solution. Est-ce que quelqu'un peut m'expliquer s.v.p.

Une fois ceci réglé je crois que je vais finallement pouvoir vous laisser tranquille et offciellement lancer mon site web. Et pour tous vous remercier je vous payes une tournée de bière!! :lol:
 
WRInaute discret
le "-" surtout entre crochet c'est un caractère spécial qu'il doit falloir "échapper" d'une manière ou d'une autre je pense... Avec un "\"... à essayer...
 
WRInaute impliqué
isolu a dit:
Je suis d'accord avec toi, j'aime bien le -idxx.php mais ça fonctionne pas. Je crois que je peux pas mettre de "-" dans mon séparateur parce que j'ai déja des "-" dans mon url. J'ai donc opté pour le "_". Pour le .html bien puisque toutes mes pages sont en .php je préfère garder le .php.

Code:
RewriteEngine on
RewriteCond %{HTTP_HOST} !www.articlesgratuits.com$ 
RewriteRule (.*) http://www.articlesgratuits.com/$1 [QSA,L,R=301]
RewriteRule ^category-([^/]*)\.php$  /en/category.php?category_url=$1 [L]
RewriteRule ^([^_]*)_([^_]*)\.php$ /en/article.php?url=$1&id_article=$2 [L]

Si je mets
Code:
RewriteRule ^([^-id]*)-id([^-id]*)\.php$ /en/article.php?url=$1&id_article=$2
ça fonctionne pas.

Bah c'est assez normal je dirais, et pourquoi, si tu utilises une id tu continearais à utiliser url=$1, c'est tout l'interet, tes requètes devrait alors demander l'id et plus le titre (bcp plus rapide)

Ta règle devrais alors ressembler à :

Code:
RewriteRule ^.+-id([0-9]+)\.php$ /article.php?id_article=$1 [QSA,L]

Et pour ton sous domaine, si j'ai bien compris, il est dans un sous dossier en fait, donc ça dépends un peut des tes settings, mais à priori, si tu mets un .htaccess dedans il ne faudrais pas ajouter /en/ dans la redirection (un sous domaine completement installé vois sont rep comme la racine pas comme un sous dossier)

Autrement tu pourrais essayer cette règle dans le .htaccess principale :
Code:
RewriteCond %{REQUEST_URI} ^www.en.articlesgratuits.com
RewriteRule ^.+-id([0-9]+)\.php$ /en/article.php?id_article=$1 [QSA,L]

Ou laisser tomber les sous domaines pour ça, un dossier remplis le un peut le meme rôle finalement, tu pourrais mettre dans le .htaccess principale :
Code:
RewriteRule ^en/.+-id([0-9]+)\.php$ /en/article.php?id_article=$1 [QSA,L]


++
 
WRInaute discret
Rrrrrrrr que ça m'enrage quand je comprend pas comment ça fonctionne.
Je vais vraiment devoir me payer un bon livre sur le sujet.

Merci beaucoup de ton aide dcz, je sais que j'ai plus besoin du $url si j'utilise le $id pour ma requête mais je tiens à garder le titre de mon article dans l'URL pour que cela soit plus facile à retenir et pour les mots clés.

Pour le sous domaine j'obtiens un erreur 404. j'ai testé
Code:
RewriteCond %{REQUEST_URI} ^www.en.articlesgratuits.com$ 
RewriteRule ^category-([^/]*)\.php$  /en/category.php?category_url=$1 [QSA,L]
RewriteRule ^([^_]*)_([^_]*)\.php$ /en/article.php?url=$1&id_article=$2 [QSA,L]

J'ai testé avec [L] au lieu du [QSA,L] j'ai aussi essayé de mettre le path au complet -http://www.articlesgratuits.com/en/article.php?url=$1&id_article=$2 et il a rien à faire.
Il me reste plus beaucoup de cheveux sur la tête tellement je me les arraches :lol:
 
WRInaute impliqué
isolu a dit:
Rrrrrrrr que ça m'enrage quand je comprend pas comment ça fonctionne.
Je vais vraiment devoir me payer un bon livre sur le sujet.

Merci beaucoup de ton aide dcz, je sais que j'ai plus besoin du $url si j'utilise le $id pour ma requête mais je tiens à garder le titre de mon article dans l'URL pour que cela soit plus facile à retenir et pour les mots clés.

De rien ;)

donc, c'est pas parce que tu souhaites utiliser le titre de tes sujets dans l'url que tu dois rediriger avec la variable $url, elle ne te sert pas là.

En fait, elle te sert uniquement à l'endroit ou tu fabrique tes liens :

-http://www.example.com/$url-id$id.html

Par contre pour rediriger, tu n'as besoin que de l'id, vu que c'est ce qui t'es utile pour trouver toutes les infos sur l'articles.

++
 
WRInaute discret
Je vois ce que tu veux dire mais je vois pas comment je dois écrire mon RewriteRule.

J'ai actuellement ceci qui fonctionne:

Code:
RewriteRule ^([^_]*)_([^_]*)\.php$ /article.php?url=$1&id_article=$2 [L]

Je vais essayer en enlevant le url=$1 et de garder id_article=$1

Je te tiens au courant.
 
WRInaute discret
Ta daaaaa!!!

Ça fonctionne, merci mille fois dcz, tu mérites ta bière :lol:
Et j'ai même réglé mon problême de sous domaine.

Donc pour résumé au cas qu'une autre personne a le même problême...

J'ai un sous domaine "en" pour ma version anglaise dont les fichiers sont dans -www.mondomaine.com/en/. Mon adresse est donc -www.en.mondomaine.com. j'ai un fichier category.php et un article.php.

L'url -www.en.mondomaine.com/category-Business.php est en réalité
-www.en.mondomaine.com/category.php?category_url et pour un article -l'url est www.en.mondomaine.com/Le-Titre-de-Larticle.php est en réalité
-www.en.mondomaine.com/article.php?id_article=xx

Vous pouvez voir le tout en action au www.en.articlesgratuits.com le site est tout neuf, j'ai seulement des articles dans la catégorie Computer-Internet mais vous êtes les bienvenues à déposer vos articles et vous pouvez mettre un lien sur votre site.

Voici mon fichier .htaccess
Code:
Options +FollowSymlinks 
RewriteEngine On 
RewriteRule ^/*(.+/)?([^.]*[^/])$ http://%{HTTP_HOST}/$1$2/ [L,R=301] 
RewriteRule ^category-([^/]*)\.php$  /category.php?category_url=$1 [QSA,L]
RewriteRule ^.+-id([0-9]+)\.php$ /article.php?id_article=$1 [QSA,L]

Si cela peut aider quelqu'un d'autre bien tant mieux.
Un gros merci encore à dcz
 
Discussions similaires
Haut