Url Rewriting, Multilingue Et Lien Perso En Foncti

12 réponses
AuteurMessage

XasFullWeb |
Membre

Photo de XasFullWeb

Inscrit le : 05/02/2009

# Le 06/07/2009 à 10:29

Bonjour à tous,


Je suis actuellement en train de préparer la MAJ d'un site qui passera en version multilingue et j'ai un petit problème.

Pour définir la langue j'utilise des liens du type :

www.site.com
en.site.com
es.site.com
de.site.com
etc...

Toutes les langages utilisent les mêmes fichiers et chargent un dossier langue en fonction.

Architecture du type :

www/lang/en/

dans www/ j'ai un htaccess qui réécrit les écritures, je voudrais personnalisé les url en fonction de la langue choisie, coté PHP pas de problème par contre niveau htaccess, je ne vois pas comment déterminer mes liens, par ex :

www.site.com/motclé1-en-français/ pointe vers page1.php
en.site.com/keyword1-in-english/ pointe vers page1.php

www.site.com/motclé2-en-français/ pointe vers page2.php
en.site.com/keyword2-in-english/ pointe vers page2.php

Niveau regex, c'est la même architecture dans les 2 cas (dans cet exemple : RewriteRule ^([a-z]*)/$), donc impossible d'identifier les 2 pages différentes en l'état.
Je ne souhaites pas écrire en dur les mots clés pour chaque lien de chaque langue car il faut que simplement en uploadant le dossier langue ce la soit opérationnel et les fichiers htaccess ne permettent pas d'inclure un fichier.


Auriez-vous une idée pour résoudre ce problème ? Est-il possible d'utiliser un htaccess d'un dossier enfant dans le dossier principal ?

Merci d'avance,


Xavier.

Full Web SARL : Création et Gestion de Sites Internet (design, script, mascotte, jeux flash, etc...)Ouvrir dans une nouvelle fenetre

MathieuC | Mathieu
Modérateur

Photo de MathieuC

Inscrit le : 15/07/2005

# Le 06/07/2009 à 12:09

XasFullWeb a dit :
Est-il possible d'utiliser un htaccess d'un dossier enfant dans le dossier principal ?

Oui

XasFullWeb | HERRIOT
Membre

Photo de XasFullWeb

Inscrit le : 05/02/2009

# Le 06/07/2009 à 18:18

Salut,

Je parle bien d'utiliser un htaccess situé dans un dossier enfant (www/dossier_enfant/.htaccess) à partir du dossier principal (www/) et non l'inverse.

Si c'est bien ça, je veux bien que tu me dises comment il faut faire ;-)

A bientôt,

Xavier.

Full Web SARL : Création et Gestion de Sites Internet (design, script, mascotte, jeux flash, etc...)Ouvrir dans une nouvelle fenetre

cerise | Gaël
Modérateur

Photo de cerise

Inscrit le : 31/10/2008

# Le 06/07/2009 à 18:40

Honnêtement je comprends pas le problème. pourquoi tu ne pourrais pas mettre un .htaccess dans les dossiers enfants ? C'est d'ailleurs mieux que d'avoir un seul .htaccess dans le www car plus clair et plus concis puisque les règles qui concernent les dossiers se trouvent donc dans les .htaccess des dossiers

cerise | Gaël
Modérateur

Photo de cerise

Inscrit le : 31/10/2008

# Le 06/07/2009 à 18:42

ok, alors désolé j'ai compris le contraire

Dans ce cas c'est ton .htaccess du dossier parent qui doit gérer les règles pour les dossiers enfants donc dans tes règles, c'est le chemin que tu modifies en ajoutant le nom du dossier

MathieuC | Mathieu
Modérateur

Photo de MathieuC

Inscrit le : 15/07/2005

# Le 06/07/2009 à 18:48

J'avais mal lu aussi

Ton htaccess peut diriger vers un fichier PHP qui va inclure page1 ou page2 selon le mot cle.

Dans tous les cas il faudra bien que tu ais une relation entre tes mots cles et tes pages ("mot cle X" => page1, "mot cle Y" => page 2). Si c'est dans une BDD, ton fichier PHP va pouvoir tapper dedans avant d'inclure page1 ou page2.

tonguide | Jeremy
Modérateur

 

Inscrit le : 09/05/2005

# Le 06/07/2009 à 20:03

Tu fais un peu comme Zend FW, tu renvois tout sur un index.php et tu fais le tri après, comme ça tu fais ce qu'il faut pour savoir quelle page appelée sans t'embêter avec ton htaccess.

Akarys | Thierry
Membre

Photo de Akarys

Inscrit le : 19/01/2008

# Le 07/07/2009 à 02:25

Bonjour XasFullWeb,

Mon expérience en multi-langues est qu'il vaut mieux bien séparer les choses :
www.site.com pointe sur $dir/www
en.site.com pointe sur $dir/en
fr.site.com pointe sur $dir/fr
...
Chaque $dir/<langue> contient
.htaccess (avec éventuellement des mots en anglais dans les RewriteRule)
robots.txt (avec nom de répertoires en anglais)
dico.inc.php (pour la génération des pages Php)
sitemap.*
favicon.ico (pour éviter les 404 dans les logs...)
index.php qui pointe sur un $dir/commun/index.php non visible du web

Pour faciliter la maintenance mieux vaut dès le début
prévoir un script qui génèrera les robots.txt et .htaccess
à partir d'une unique référence et du fichier dico associé à chaque langue.

Au final c'est assez simple et souple.
En espérant que ça aide.
Akarys

XasFullWeb | HERRIOT
Membre

Photo de XasFullWeb

Inscrit le : 05/02/2009

# Le 08/07/2009 à 20:57

Merci pour vos réponses.

Akarys, je pense que je vais le faire comme ça, si j'ai des questions, je repasse ;)

Encore merci,

Xavier.

EDIT : J'ai compris le système, j'ai fais quelques tests c'est ok, par contre pour cette étape : "index.php qui pointe sur un $dir/commun/index.php non visible du web" comment t'y prends tu ?

Ex : En utilisant une page unique de "redirection" et des includes :
en.site.com pointe vers en/redirect.php qui affiche la page www/index.php
en.site.com/page1.html pointe vers en/redirect.php?page=page1.php qui affiche la page www/page1.php
=> en utilisant un include pas de problème, par contre dès l'instant qu'il y a des variables ça bloque (forcément) :
en.site.com/[id]/page1.html pointe vers en/redirect.php?page=page1.php?id=[id] qui affiche la page www/page1.php?id=[id]
Ou alors tu fais directement une boucle sur toutes les variables GET dans la page de redirection (à 1ère vue pas très sécurisé mais j'suis fatigué) ?

Merci d'avance,

Xavier.

(Message édité le 08-07-2009 à 23h00 par XasFullWeb)

Full Web SARL : Création et Gestion de Sites Internet (design, script, mascotte, jeux flash, etc...)Ouvrir dans une nouvelle fenetre

Akarys | Thierry
Membre

Photo de Akarys

Inscrit le : 19/01/2008

# Le 09/07/2009 à 03:41

Bonjour XasFullWeb,

Euh désolé mais pas trop compris ton histoire de redirect ou de variables ??

Une solution simple si accès aux liens : cd $dir/en; ln -s ../commun/index.php .
Sinon (mutualisés de base) : <?php $site='en'; include('../commun/index.php'); ?> dans $dir/index.php

Ensuite pour les variables aucun soucis, tu récupères normalement les $_GET dans les 2 cas.

XasFullWeb | HERRIOT
Membre

Photo de XasFullWeb

Inscrit le : 05/02/2009

# Le 09/07/2009 à 18:07

Salut,

Merci, c'est bon, c'est juste que j'avais besoin de dormir :S, ça marche nikel.

A+,

Xavier.

Edit : Juste une petite question, j'utilise la méthode avec include, ça marche nikel, mais ta première méthode, je ne la connais pas : cd $dir/en; ln -s ../commun/index.php, ça s'utilise où ? dans le PHP ? le htaccess ? autre ?


(Message édité le 09-07-2009 à 19h59 par XasFullWeb)

Full Web SARL : Création et Gestion de Sites Internet (design, script, mascotte, jeux flash, etc...)Ouvrir dans une nouvelle fenetre

Akarys | Thierry
Membre

Photo de Akarys

Inscrit le : 19/01/2008

# Le 10/07/2009 à 10:00

> ça s'utilise où ?
;)

Dans un shell Linux
C'est ce qu'on appelle en français un "lien logique",
et c'est le système qui fait le "pointer" sur un autre fichier.

XasFullWeb | HERRIOT
Membre

Photo de XasFullWeb

Inscrit le : 05/02/2009

# Le 11/07/2009 à 10:37

Salut,

Ok, je ne connaissais pas, merci pour l'explication ;)

A+,

Xavier.

Full Web SARL : Création et Gestion de Sites Internet (design, script, mascotte, jeux flash, etc...)Ouvrir dans une nouvelle fenetre

Répondre

Vous ne pouvez pas participer au forum, car votre inscription n'a pas été validée. Pour vous faire valider en tant que Membre, cliquez ici.

© MHN - Tous droits réservés | CNIL N°844440 | 24/11/2024 2:24:18 | Généré en 7.7ms | Contacts | Mentions légales |