PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 15-01-2014 12:08:05

Cedric06
Membre
Inscription : 14-09-2011
Messages : 16

url_rewriting automatique

Bonjour à tous et toutes,

et pour commencer, je vous souhaite une très bonne et heureuse année !!

Mon problème
je travaille à la création d'un site mais celui-ci requiert deux choses que je ne maîtrise pas =>
1 - l'url-rewriting automatisé => générer une page du type www.lesite.com/nom_et_id_de_l_objet.html pour chaque objet ajouté en Base
2 - la création par le user de sa page perso => du type www.nom-du-user.lesite.com

l'url-rewriting
A ce jour, je gère l'URL rewriting en insérant manuellement dans le fichier .htaccess les lignes nécessaires à effectuer la convertion
exemples :
RewriteRule ^accueil.html index.php?page=accueil [L]
RewriteRule ^connexion.html index.php?page=seloguer [L]

Ce qu'il me faudrait c'est une syntaxe me permettant de générer une page html de façon automatique lorsqu'un nouvel objet est entré
exemple :
objet = mon_futur_tube
type = mp3
lien réél => www.lesite.com/fiche_prod.php?id_prod=8210
lien visible => www.lesite.com/mon_futur_tube_mp3_idprod.html

Cela est fondamental pour l'usage du lien (le partager un peu partout) et le référencement par les moteurs !

Le lien (ou la page ?) doit être conçu de façon à ce que la fiche sur l'objet s'affiche correctement en VIGNETTE par exemple sur FaceBook... Or j'ai pu constater que l'insertion d'un lien dans FB provoquait des affichages différents selon les cas, un mystère pour moi ! Quelqu'un sait-il comment cela fonctionne ? Le but serait de paramétrer la page (fiche de l'objet) de telle façon que FaceBook affiche en vignette la photo voulue et le descriptif voulu.

PS: pour le sous-domaine, je vais faire une demande séparée car je crois qu'on ne doit pas mettre deux demandes dans le même Post :-)

Merci beaucoup par avance pour votre aide

Cordialement
Cédric

Hors ligne

#2 16-01-2014 14:45:18

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : url_rewriting automatique

Bonjour,

Je vais reposter ici la réponse que je vous avais faite par email, déjà pour en faire profiter tout le monde, et aussi au cas où vous ne l'ayez pas reçu.
----------------------------
De manière à rendre votre rewrite possible, il est nécessaire au préalable de rendre consultable chaque produit de votre site à travers une url spécifique exemple avec un seul paramètre:  http://www.monsite.fr/produits?id=12324 ou avec plusieurs http://www.monsite.fr/produits?id=1234& … color=bleu
Il est donc essentiel que cet accès soit possible à travers votre front controller applicatif. Une fois ceci en place, il vous sera aisé de construire vos règles de rewrite pour consulter vos pages produits.
Vous noterez dans mes exemples l'absence de nom de produit qui peux toutefois être présent dans votre url rewrité et ignoré dans votre règle de rewrite pour ne passer à l'application que les paramètres utiles (normalement l'id suffit s'il corresponds à la clé primaire produit). Dans le cas où un produit existe en deux coloris avec la même id et que vous souhaitiez mettre en place deux fiches produits distinctes, alors le coloris devra être inclus dans la règle de rewrite avec l'id.

Voici deux exemples de règle de rewrite que vous pourrez adapter à votre besoin:

URL:    http://monsite.fr/produit-1234.html
Règle: RewriteRule produit-(.*)\.html$ /products.php?id=$1 [L]

URL: http://monsite.fr/produit-1234-coloris_bleu.html
Règle: RewriteRule produit-(.*)-coloris_(.*)\.html /products.php?id=$1&color=$2 [L]

En espérant vous avoir aidé suffisamment.

Jc

EDIT: Je vais rajouter ceci cependant. Dans votre exemple pour que votre rewrite fonctionne, il faut que 8210 soit inclus dans votre url rewrité quelque part, sinon cela ne peut fonctionner, où alors au risque d'une importante chute de performances et que le texte entré en rewrite puisse être passé en l'état en paramètre de votre fichier php.

Dernière modification par Jc (16-01-2014 14:48:35)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#3 17-01-2014 13:09:14

Cedric06
Membre
Inscription : 14-09-2011
Messages : 16

Re : url_rewriting automatique

Bonjour JC,

Merci vraiment beaucoup beaucoup pour votre réponse qui m'a été super utile ! Grâce à elle je comprend enfin (je crois) un peu quelque chose à la syntaxe des règles du rewiting :-)

deux petites précisions si vous voulez bien :

1 - compréhension de votre exemple

l'url réelle ? => www.monsite.fr/produits?id=1234&color=bleu
l'url virtuelle => www.monsite.fr/produit-1234-coloris_bleu.html
la Règle => RewriteRule produit-(.*)-coloris_(.*)\.html /products.php?id=$1&color=$2 [L]

dans l'url réelle
a) n'est-ce pas "produit" au lieu de "produits" ?
b) à quoi correspond "/produits?" ? le nom d'une page php, mais alors quelle différence avec products.php ? une occurence ?

dans la règle
c) est-il juste de dire que id=$1 correspond à la 1ière valeur passée dans l'url ?
d) si j'intervertis les deux variables dans l'url réelle, pourrais-je alors avoir le coloris avant l'id ?
le but serait d'afficher plutôt une url virtuelle du type www.monsite.com/moto-yamaha-tdm900-1234.html
à partir d'une url réelle du type www.monsite.com/products.php?nature=moto&marque=yamaha&nom_prod=tdm900&id_prod=1234


2 - l'écriture ci-après vous semble-t-elle correcte ?

- objectif => créer un lien du type www.monsite.com/creme-hydratante-bio-yves-rocher-2345.html
- depuis => un lien réel du type www.monsite.com/produits.php?nom_prod=creme-hydratante-bio&marque=yves-rocher&id_prod=2345
- la règle => RewriteRule (.*)-(.*)-(.*)\.html /produits.php?nom_prod=$1&marque=$2&id_prod=$3 [L]
  ou bien => RewriteRule (.*)-(.*)-(.*)\.html /produits.php?id_prod=$3&nom_prod=$1&marque=$2 [L]

et si cest correct et que pour un autre produit j'ai un 4iem paramètre, par exemple le volume, comment je fais pour que la distinction soit faite et que j'ai bien à la sortie
www.monsite.com/creme-hydratante-bio-yves-rocher-100ml-2346.html
car ce lien va devoir passer dans une nouvelle moulinette différente du genre
- la règle => RewriteRule (.*)-(.*)-(.*)-(.*)\.html /produits.php?nom_prod=$1&marque=$2&qte=$3&id_prod=$4 [L]

Comme vous l'avez deviné, je souhaite créer un rewriting me permettant d'afficher l'id en fin d'url et de faire varier le nombre de variables qui vont me permettre de créer le lien final décrivant le produit aussi bien que possible.

Merci beaucoup par avance,

Cédric

Hors ligne

#4 17-01-2014 22:35:29

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : url_rewriting automatique

Bonsoir,

Alors oui excusez-moi j'ai écris un peu vite donc je corrige^^

l'url réelle ? => www.monsite.fr/products?id=1234&color=bleu
l'url virtuelle => www.monsite.fr/produit-1234-coloris_bleu.html
la Règle => RewriteRule produit-(.*)-coloris_(.*)\.html /products.php?id=$1&color=$2 [L]

Voilà smile Ce qui compte c'est que la règle "matche" l'url virtuelle, à partir de là on peut rewriter sur une url réelle complètement différente du moment qu'elle existe et qu'elle sera capable de traiter la requête.

Pour vos questions, comme je vous l'ai dit vous pouvez occulter la désignation rewritée dans votre règle car au final vous ne vous en servirez pas pour trouver votre produit car seul la recherche par clé technique ou clé technique composite est pertinente, performante et efficace.

Rien ne vous empêche donc de créer une règle de rewrite par catégorie de produit ou par type de produit ayant chacune leur spécificité de rewrite.
Par exemple :

objectif => créer un lien du type www.monsite.com/creme-hydratante-bio-yves-rocher-2345.html
- depuis => un lien réel du type www.monsite.com/produits.php?id_prod=2345
- la règle => RewriteRule .*-(.*)\.html /produits.php?id_prod=$1 [L]

En ce qui concerne le paramètre du volume du produit, s'il corresponds à un conditionnement spécifique et donc une référence et des caractéristiques différentes d'un même produit, alors ce critère est pertinent et il faut le faire matcher et donc l'inclure dans la règle. Avec ce que je viens de vous dire cela devrait aller je pense pour que vous vous en sortiez wink

N'oubliez pas non plus pour que le moteur de recherche connaisse votre url virtuelle, il faut qu'elle soit présente en lien sur une page de votre site. Or dans votre code PHP qui va construire votre URL virtuelle à référencer, l'ensemble des informations relatives au produit nécessaires à cette création seront connus.

++

Dernière modification par Jc (17-01-2014 22:39:11)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#5 23-01-2014 15:44:23

Cedric06
Membre
Inscription : 14-09-2011
Messages : 16

Re : url_rewriting automatique

Bonjour JC,

et un très très grand merci !!

j'ai bien lu et visiblement assez compris car j'ai effectué quelques tests ça a fonctionné... :-) Bref c'est un peu plus clair pour moi et ça va me permettre d'avancer.

En revanche, toujours à propos de l'url rewrite, que signifie [QSA] ?

en effet, dans un .htaccess que j'ai (dans un script complet que j'ai acheté mais qui est bourré de beug - volontaires en plus de la part de celui qui l'a créé/repris et le vend :-/  au lieu du classique [L], là j'ai autre chose... et j'ai même une ligne à la fin de laquelle il y a les deux
RewriteRule ^([-]?[0-9]+)([-_][^/]*)? /index.php?view=main&cityid=$1 [QSA]
RewriteRule ^([-]?[0-9]+)([-_][^/]*)?/annonces/([0-9]+)([-_][^/]*)?/page([0-9]*)\.html index.php?view=ads&catid=$3&subcatid=0&&cityid=$1&page=$5 [L,QSA]

Dernière question, si j'utilise un même herbergement pour y mettre plusieurs sites (dans des sous-répertoires) avec ou sans "redirections" liés à des noms de sous-domaines pour faire pointer,
est-ce que je dois paramétrer le .htaccess de la racine avec toutes les règles ou bien créer un .htaccess pour chaque "sous-site" ?
J'ai déjà eu pas mal de soucis avec ça, notamment avec des pages où le html s'affichent (textes et couleurs) mais aucune image, logo etc...
et pareil en cas d'erreur 404, car visiblement le chemin virtuel et le chemin réél s'entrechoquent...

Merci en tous cas encore pour l'aide déjà fournie, c'est génial !

Bien cordialement

Cédric

Hors ligne

#6 23-01-2014 18:08:08

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : url_rewriting automatique

Bonjour,

1) Pour aller plus en profondeur avec le rewrite je vous donne la bible de référence => La doc apache du module rewrite

Pour répondre à votre question précisément sur le drapeau [QSA] et pour éviter tout risque d'erreur je vous fait une extraction de la doc à ce sujet :

Quand l'URI de remplacement contient une chaîne de requête, le comportement par défaut de la règle RewriteRule est de supprimer la query string (il s'agit des paramètres éventuellement passés dans l'URL après le caractère ?, usuellement pour les formulaires traités par la méthode HTTP GET) existante, et de la remplacer par celle nouvellement créée. Avec le drapeau [QSA], les chaînes de requête peuvent être combinées.

Considérons la règle suivante :
RewriteRule /pages/(.+) /page.php?page=$1 [QSA]
Avec le drapeau [QSA], une requête pour /pages/123?one=two sera réécrite en /page.php?page=123&one=two. Sans le drapeau [QSA], la même requête sera réécrite en /page.php?page=123 - autrement dit, la chaîne de requête (query string) existante sera supprimée.

Voilà si vous avez besoin d'explications, n'hésitez pas wink

2) En ce qui concerne les .htaccess
Le fichier .htaccess s'applique pour toute l'arborescence descendante issue du dossier dans lequel il est placé, et réévalué par le serveur à chaque lancement de scrit, ce qui est important de le souligner car cela peut créer d'importants overheads de traitements surtout en cas de charge serveur importante (utilisation site).
Si dans un sous répertoire de celui-ci se trouve un autre .htaccess, il sera également évalué et les dernières règles s'ajouteront et/où remplaceront les précédentes.

Les meilleures performances s'obtiennent avec un serveur dédié en plaçant les règles de rewrite du .htaccess directement dans le fichier de configuration d'apache qui seront prises en compte automatiquement (sans aucune réévaluation) et par défaut pour l'ensemble du site sans aucun overhead de traitement.

++

EDIT: Pour le cas des sous-domaines, de toute manière vous ne pourrez pas les créer en dehors d'une interface admin dans un contexte mutualisé, car il n'y a pas de sous-domaine possible sans reconfiguration du fichier .conf d'apache. La redirection y sera incluse.
Ensuite sans sous-domaine réel, il est possible en effet de déclarer un sous-domaine et de le rediriger vers un sous-répertoire du domaine principal à partir de vos DNS. Mais l'écriture du sous-domaine ne sera pas conservée dans l'url.

Dernière modification par Jc (23-01-2014 19:07:23)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

Pied de page des forums