Rewrité un chiffre en une chaine, c'est possible ?

WRInaute discret
Bonsoir tout le monde,
J'espere que vous allez bien :)

J'imagine que mon titre peut paraitre flou mais j'ai du mal à trouver une autre formulation.

En ce moment le rewriting des articles se fait de la manière suivante :

Code:
RewriteRule ^article([0-9]+)/.* /article/index.php?ID=$1

En ajoutant un systeme de catégorie, les urls de mes articles vont être de la manière suivante :
Code:
/article/index.php?ID=1&C=2

J'aimerais avec l'url-rewriting, obtenir des liens de ce genre :

-http://www.ndd.fr/photo/99-bli-bli.html
-http://www.ndd.fr/livre/98-blabla.html

Donc quand C=1, ca serait la catégorie photo, quand C=2 ca sera la categorie livre par exemple.
Je ne vois pas trop comment procéder avec des chaines de caractère prédéfini selon la categorie.

Si quelqu'un pouvait me guider ca serait sympa.
Merci d'avance et bonne soirée.

++
Machiga
 
WRInaute occasionnel
Et bien tu fais 2 règles :

RewriteRule ^photo/([0-9]+)/.* /article/index.php?ID=$1&C=2
RewriteRule ^livre/([0-9]+)/.* /article/index.php?ID=$1&C=1


Avec ca je pense que ca devrait aller.
 
WRInaute passionné
Question : Pourquoi veux tu trainer la catégorie ?

J'imagine que ID est l'id (unique?) d'un article dans ta base de donnée, tu dois aussi y stocker la catégorie non ?
 
WRInaute discret
Tout d'abord merci à vous 2 de m'avoir répondu.
L'id est effectivement l'id unique d'un article. Et dans la base de donnée, la catégorie y sera effectivement stockée.
Dans ce cas-ci, je veux trainer la catégorie pour justement donner un nom de catégorie dans l'url-rewriting.
Mais en y réfléchissant, peut-être qu'il vaudrait mieux créer un repertoire pour chaque categorie ? C'est vrai qu'il serait tres facile ensuite de définir vers quel repertoire pointe tel ou tel article selon son numéro de catégorie.
Mais est-ce qu'une solution comme celle-ci est conseillé s'il y a environ 25 catégories ?

A moins que je me trompe complétement... ?


Merci d'avance

++
Machiga
 
WRInaute passionné
machiga a dit:
Dans ce cas-ci, je veux trainer la catégorie pour justement donner un nom de catégorie dans l'url-rewriting.
Inutile : Tu va chercher l'article grace à l'ID et tu récupère dansla base de donnée la catégorie qui correspond. :wink:
 
WRInaute discret
Oui mais comment je l'utilise ensuite pour le definir dans l'url ? (dois-je créer des repertoires au prealable?)

( désolé si ma question parait bête... :oops: )
 
WRInaute passionné
De la même façon que tu récupère son titre. Si tu veux faire un lien vers un article du genre -http://www.ndd.fr/livre/98-blabla.html, il faut que tu connaisses son ID (98), son titre (blabla), et sa catégorie (livre). Il faut donc, avant tout, faire une requête sur ta base pour récupérer ces infos et qu'elles soient disponibles dans ton script.
 
WRInaute passionné
Utilise
Code:
RewriteRule ^/([a-z_-]+)/article([0-9]+)/.* /article/index.php?ID=$2

Si tu fais un lien vers /livre/article98/ ça marche, pour /coucous-suisses/article17/ aussi.

Par contre quand tu fais tes liens, fais bien gaffe à ne pas en faire vers /coucous-suisses/article98/ sinon tu auras le meme contenu à deux URL différentes.
 
WRInaute discret
Bonsoir,
Merci pour tout vos conseils !

jeroen je crois avoir saisi le truc, merci :)

Dj_Apx , ta manière de faire est vraiment bien mais j'ai une question au niveau performance.
Est-ce que le fait d'appeler toujours le même fichier pour 10.000 articles par exemple (10.000 fois par jour, chiffre fictif) peut il avoir un impact negatif sur le serveur, fichier ou autre ? Est dans ce cas là ne vaut-il mieux pas repartir la tache sur plusieurs fichiers ? (genre un index par catégorie?)

Merci d'avance

++
Machiga
 
WRInaute passionné
Les serveurs web ne fonctionnent pas avec des disques vinyl, tu ne vas pas l'user parce que tu lis toujours le même endroit.

Nota bene : les 650 000 posts de WRI sont tous affichés avec le même viewtopic.php.
 
WRInaute discret
Salut à tous, je me pose la même question que machiga,

Mais puis-je faire une requête SQL dans un fichier .htaccess pour récupérer des valeurs ?

Par exemple, j'ai un site de bateau avec un truc du genre :
annonce_bateau_voir.php&voile=1&moteur=1&idannonce=196

Que je voudais changer par
annonce_bateau_voir/voilier/moteur/196/$modele-du-bateau

Et je peux récupérer des attributs du bateau dont le modele dans ma base SQL par le numéro 196.
Mais comment faire ?
Je fait ma requête SQL dans le .htaccess ?

Merci pour vos réponses.
 
WRInaute accro
>> Je fait ma requête SQL dans le .htaccess ?

houla, un fichier htaccess ici ne sert qu'à ré-écrire une url en une autre. on ne peut aps mettre d html, de php, executer du sql, ou n'importe quoi d'autre.

ton fichier htaccess renvoi le modele du bateau dans ta paga php, et c est elle qui va recuperer dans la BDD les donnes nécéssaires
 
WRInaute discret
e-kiwi a dit:
>> Je fait ma requête SQL dans le .htaccess ?
ton fichier htaccess renvoi le modele du bateau dans ta paga php, et c est elle qui va recuperer dans la BDD les donnes nécéssaires

Arfff, je vois pas trop en fait, est ce que vous pourriez me donner un exemple précis ? (en php si possible)

Parce que mon url fini par idannonce=$id

Il faut que je fasse en gros :
$id = $_GET['id'];
select modele from bateaux where id=$id
et là je réécris avec le modele du bateau...
 
WRInaute passionné
Ton script PHP marche déjà ?
Bon.

Le principe est le suivant : au lieu de faire tes liens comme tu faisais avant (<a href="annonce_bateau_voir.php&voile=1&moteur=1&idannonce=196 ">) tu vas faire de "jolis liens" (<a href="annonce_bateau_voir/voilier/moteur/196/$modele-du-bateau">). Ca c'est facile; vu que c'est ton site c'est toi qui décides de comment les liens sont faits.

Ensuite le fichier htaccess fait en sorte que, quand on accède aux nouvelles URL (annonce_bateau_voir/voilier/moteur/196/$modele-du-bateau), PHP va "croire" qu'on continue à appeler annonce_bateau_voir.php&voile=1&moteur=1&idannonce=196.

Donc tout va marcher correctement. Pas de requête SQL à ajouter où que ce soit.
 
WRInaute discret
:lol:

Cool, je crois avoir compris le truc.
Me reste plus qu'à le mettre en place...

Merci encore, j'espère que ça va marcher.
+++
 
WRInaute discret
Par contre, pour chaque marque de bateau, je dois faire une ligne dans le .htaccess ?

Pas moyen de faire une boucle ou qqch de ce style ?
 
WRInaute discret
Ok cool, alors voila, j'ai 3 URLs finales qui sont par exemple :


http://www.occasionsenmer.com/annon...eur_m=0&prix=0&voile=1&moteur=1&idannonce=514
http://www.occasionsenmer.com/annon...eur_m=0&prix=0&voile=1&moteur=1&idannonce=512


http://www.occasionsenmer.com/annonce_bateau_voir-bateau-a-moteur-Jeanneau-fluvial-et-mer
http://www.occasionsenmer.com/annonce_bateau_voir-voilier-beneteau-first-class-10

En fait ca correspond au détail de l'annonce, l'annonce 514 est un bateau à moteur de marque Jeanneau et c'est le modèle Fluvial et mer.
(Je récupère ces données dans ma base SQL en fonction du numéro de l'annonce)
Je ne sais pas si c'est possible comme ca.

Merci :wink:
 
WRInaute passionné
Remplace annonce_bateau_voir (trop long) par annonce-
Et mets les ID nécessaires
annonce-514-bateau-moteur-blalblzrlbvlzeablrlblazelbrlfebelabale

tout ce qui est intéressant de toute façon, c'est le 514.
donc tu pourras réécrire annonce-([0-9]*)-(.*) sans aucun problème.

D'ailleurs dans tes liens non réécrits, ça ne sert absolument à rien de préciser le type de bateau, le type de moteur, la météo du jour, si tu peux récupérer tout ça à partir de l'id=514 !
 
WRInaute discret
Et après comment je récupère mes information dans ma base pour les faire apparaitre dans l'url ?

Peux tu me donner un exemple car je ne vois pas bien... :?
 
WRInaute passionné
Bon... la première étape est faite, tu as compris la moitié du truc.
Maintenant je vais ré-expliquer l'autre moitié, que tu avais déjà comprise avant :

vu que pour un ID donné tu connais tout le reste,eh bien pour faire le lien tu sais déjà quoi mettre : <a href="annonce-$lenumero-$letypesansaccent-$lamarquesansaccent"> $letype - $lamarque</a>
Au lieu de <a href="annonce-bateau-voir.php?idannonce=$lenumero"> $letype - $lamarque</a>
 
WRInaute passionné
Plutot que de te pêcher le poisson, l'écailler, l'asaisonner, le cuire et te le servir, je vais te laisser te servir toi-même cette fois ci ; adapte le code suivant à ton cas :
Dj_Apx a dit:
Utilise
Code:
RewriteRule ^/([a-z_-]+)/article([0-9]+)/.* /article/index.php?ID=$2

Si tu fais un lien vers /livre/article98/ ça marche, pour /coucous-suisses/article17/ aussi.

Par contre quand tu fais tes liens, fais bien gaffe à ne pas en faire vers /coucous-suisses/article98/ sinon tu auras le meme contenu à deux URL différentes.

:wink:
 
WRInaute discret
Ok,

Merci pour le coup de main...
J'avais déjà vu ce post, mais jamais eu le courage de m'y atteler.

Le petit souci (encore et oui), c'est que l'url rewriting est déjà en place sur mon site sous la forme :
Code:
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

Qui permet de réécrire chaque page (qui possède un id) par un titre de page.
Et moi ma page avec le détail de l'annonce est à l'Id : q=76.

J'ai donc essayé d'insérer la ligne suivante dans mon htaccess :
Code:
RewriteRule ^annonce_bateau_voir/([a-z_-]+)/bateau([0-9]+)/.php$  index.php?q=76&idannonce=$1 [L]
Juste avant celle du dessus.

Mais ca me fait planter tout le site 8O
Une idée en passant ?
Merci
 
WRInaute passionné
Cafaitplanter et Camarchepas ne sont pas des erreurs connues. 404, 500, 501... en sont.
Quelle est l'erreur ?

Regarde bien la règle que tu as écrite. A quoi va ressembler l'URL ?
 
WRInaute discret
Je passe du coq à l'âne mais aujourd'hui je suis sur un autre site et j'ai la même problématique. Donc si j'arrive à le faire sur ce site je pourrais le faire partout.

Voici l'autre site en question avec les paramètres actuels.
http://www.pharmaservice.net/Le_por...ail_prestataire_pharma.php&prestataire_id=548

Que je souhaiterais transformer en :
http://www.pharmaservice.net/Le_portail_pharmaceutique/Prestataires/548/medela
par exemple.

Comme je vous l'ai dit, j'utilise un CMS qui me change chaque numéro de page en son titre.
Donc ici ca change la page n°56 en : detail_prestataire_pharma.php

Dans mon fichier .htaccess, j'ai donc cette ligne générique :
Code:
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

Pour effectuer la manip de rewriting que je veux, j'ai donc insérer avant cette ligne celle-ci :

Code:
RewriteRule ^prestataire-pharma/([a-z_-]+)/([0-9]+)$  index.php?q=56&prestataire_id=$1 [L]

Et quand j'appelle ma page par :
Code:
http://www.pharmaservice.net/Le_portail_pharmaceutique/Prestataires/prestataire-pharma/medela/528

Forcément... ça me fait une erreur 404 de page non trouvée.
et même ma page d'accueil tombe en erreur 404.

Me suis je trompé dans ma ligne htaccess ? ou alors dans l'appel de la page ?

Merci, je suis paumé à cause de la ligne générique qui me change toutes les pages...
 
WRInaute passionné
Ton .htaccess se trouve où ?
Sache que ^signifie "le début de l'url" donc ^prestataires/ veut dire que si le .htaccess est dans /toto/, tu t'occupes des url en /toto/prestataires/
 
WRInaute discret
Yop,

merci de ta réponse.

Mon .htaccess est à la racine de mon site
Je n'ai aucun sous répertoire.

Les sous répertoires affichés dans l'url sont virtuels.
 
WRInaute discret
Hello à nouveau.

J'ai de bonnes nouvelles... mais aussi de mauvaises...

Voici l'appel de la page (pas visible actuellement car j'ai tout remis en ordre)
Code:
http://www.pharmaservice.net/prestataire-pharma/528/medela/

Qui correspond à la ligne dans mon .htaccess :
Code:
RewriteRule ^prestataire-pharma/([0-9]+)/([a-z_-]+)/$  index.php?q=56&prestataire_id=$1 [L]

Ca fonctionne pour la fiche en question, j'arrive bien dessus, mais :

Ma page d'accueil ne marche plus (pharmaservice.net est en 404)
Et toutes mes images, qui sont en absolu (/img/blabla.jpg) ont disparu
Et ma feuille de style css n'est plus prise en compte !!
Grrrr
Any idea ?
Merci encore, car je progresse...
[/code]
 
WRInaute discret
Code:
# MODx supports friendly URLs via this .htaccess file. In order to use it, you must change the 
# file name from ht.access to .htaccess. If you don't want to use friendly URLs, you can comment 
# the three Rewrite directives out with pound signs (like the beginning of this line).
#
# Make sure RewriteBase points to the directory where you installed MODx.
# E.g., "/" if your installation is in your root web documents directory (it comes this way by 
# default) or "/MODx" if your installation is in a MODx subdirectory, per the comments below. You
# must serve web pages via Apache with mod_rewrite to be able to use this functionality.
#
# The last two blocks of rules at the bottom of this .htaccess file address anamolies with IE 
# for Windows PCs and the way in which it caches images, which causes a distracting flicker in 
# background images when links are hovered on the page.
#
# The output compression directives immediately below serve to speed up delivery of web pages, 
# and may also be optionally commented out.

php_flag zlib.output_compression On
php_value zlib.output_compression_level 5

# Rewrite directives here for SEF (Search Engine Friendly) URLs

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# If your MODx installation is in a subdirectory, change the following line to match the physical
# path to the "root" of the site as follows:
# RewriteRule ^(.*)$ /path/to/subdirectory/index.php?q=$1 [L,QSA]

#Detail des prestataires
#RewriteRule ^prestataire-pharma/([0-9]+)/([a-z_-]+)/$  index.php?q=56&prestataire_id=$1 [L]

RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

# This following two sections stops screen flicker in IE on rollovers (Bad IE Win, Bad!).
# Comment these sections out if you do not need them. They can result in having to force reload
# pages when developing sites and changing images frequently to see your changes. 

#ExpiresActive On
#ExpiresByType image/gif A2592000
#ExpiresByType image/jpeg A2592000
#ExpiresByType image/png A2592000

#BrowserMatch "MSIE" brokenvary=1
#BrowserMatch "Mozilla/4.[0-9]{2}" brokenvary=1
#BrowserMatch "Opera" !brokenvary
#SetEnvIf brokenvary 1 force-no-vary


Je pense que ça vient de mon CMS.
J'ai posté sur le forum du CMS en question, je vais voir s'il y a des personnes qui ont eu le même souci.
 
Nouveau WRInaute
bonjour à tous,
je fais remonter ce topic assez vieux, j'y ai trouvé certaines infos que je cherchais, mais j'ai encore une question.

ça, c'est ce que je voudrais faire à peu près:
Dj_Apx a dit:
Utilise
Code:
RewriteRule ^/([a-z_-]+)/article([0-9]+)/.* /article/index.php?ID=$2

Si tu fais un lien vers /livre/article98/ ça marche, pour /coucous-suisses/article17/ aussi.

Par contre quand tu fais tes liens, fais bien gaffe à ne pas en faire vers /coucous-suisses/article98/ sinon tu auras le meme contenu à deux URL différentes.

alors si je comprends bien, quelqu'un peut faire un lien vers ma page /livre/article98/ en utilisant l'url /nimportequoi/article98 ...

hors, j'ai lu juste avant sur ce site que plusieurs urls pour une meme page = duplicate content et que c'est pas bon. peut-on éviter cela?

merci
 
WRInaute passionné
pouly a dit:
alors si je comprends bien, quelqu'un peut faire un lien vers ma page /livre/article98/ en utilisant l'url /nimportequoi/article98 ...

hors, j'ai lu juste avant sur ce site que plusieurs urls pour une meme page = duplicate content et que c'est pas bon. peut-on éviter cela?

merci
La probabilité que ça arrive est assez faible pour que tu n'aies pas envie de t'occuper d'un problème aussi mineur :wink:
 
Nouveau WRInaute
merci.
et si par hazzard j'avais envie, il suffirait qu'avant tout envoie de html au navigateur, je calcul quelle est la "vraie" url rewrité.
Par exemple mon url rewrité je la stock en base de donnée, donc je peux la récupérer, puis je compare si l'url saisie est la meme que celle en base de donnée, et si non, je fais un move permanently header 301 (j'ai vu ca sur ce site aussi)

J'ai bon? :D
 
Discussions similaires
Haut