IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Apache Discussion :

[.htaccess] Configurer sous-domaines virtuels pour un site multilingue


Sujet :

Apache

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 6
    Points : 2
    Points
    2
    Par défaut [.htaccess] Configurer sous-domaines virtuels pour un site multilingue
    Bonjour,

    Je souhaiterais récupérer le sous-domaine (éventuel, car pas requis obligatoirement) virtuel de mon URL pour traduire mon site en fonction de la langue. Par exemple :

    http://en.monsite.com/login --> http://monsite.com?sub=en&menu=login

    http://en.monsite.com/annonces/chiens --> http://monsite.com?sub=en&menu=annonces&rubrique=chiens

    J'ai pas mal cherché et si j'arrive à récupérer le sous-domaine pour la page d'accueil, pour les réécritures plus longues c'est la misère...

    Voici un extrait de mon fichier .htaccess :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    RewriteCond %{REQUEST_URI} ^/$
    RewriteCond %{HTTP_HOST} ^([a-z]+)\.monsite\.com$ [NC]
     
    RewriteRule ^(.*) ?sub=%1 [NC,L]
     
    RewriteCond %{HTTP_HOST} ^([a-z]+)\.monsite\.com$ [NC]
     
    RewriteRule ^login$ ?sub=%1&menu=login [L]
    RewriteRule ^register$ ?sub=%1&menu=register [L]
     
    RewriteRule ^([-a-z0-9]+)-([A-Za-z0-9]+)\.html$ ?sub=%1&menu=ad&ad=$2 [L]
    RewriteRule ^ads\/([-A-Za-z0-9]+)\/([-A-Za-z0-9]+)\/([-A-Za-z0-9]+)$ ?sub=%1&menu=ads&section_name=$1&category_name=$2&subCategory_name=$3 [L]

  2. #2
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Pour info, il faut répéter les RewriteCond, on ne peut pas les factoriser. Du coup, je suggère fortement de mettre un saut de ligne pour séparer les règles après les RewriteRule, ce sera plus facile de lire le .htaccess :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    RewriteCond %{REQUEST_URI} ^/$
    RewriteCond %{HTTP_HOST} ^([a-z]+)\.monsite\.com$ [NC]
    RewriteRule ^(.*) ?sub=%1 [NC,L]
     
    RewriteCond %{HTTP_HOST} ^([a-z]+)\.monsite\.com$ [NC]
    RewriteRule ^login$ ?sub=%1&menu=login [L]
     
    RewriteCond %{HTTP_HOST} ^([a-z]+)\.monsite\.com$ [NC]
    RewriteRule ^register$ ?sub=%1&menu=register [L]
     
    RewriteCond %{HTTP_HOST} ^([a-z]+)\.monsite\.com$ [NC]
    RewriteRule ^([-a-z0-9]+)-([A-Za-z0-9]+)\.html$ ?sub=%1&menu=ad&ad=$2 [L]
     
    RewriteCond %{HTTP_HOST} ^([a-z]+)\.monsite\.com$ [NC]
    RewriteRule ^ads\/([-A-Za-z0-9]+)\/([-A-Za-z0-9]+)\/([-A-Za-z0-9]+)$ ?sub=%1&menu=ads&section_name=$1&category_name=$2&subCategory_name=$3 [L]

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Merci beaucoup pour ton aide, je comprends pour les RewriteCond. Hélas, ça ne fonctionne pas mieux chez moi. J'aimerais pouvoir te donner plus d'infos pour que tu puisses m'aider, mais là je ne vois pas...

  4. #4
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Ben dis nous dans le détail ce qui marche et ce qui ne marche pas, et dans ce cas quel est le problème exact rencontré et ce que tu aimerais qu'il se passe.

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    J'attends que mes redirections agissent ainsi :

    http://en.monsite.com/login --> http://monsite.com?sub=en&menu=login

    http://en.monsite.com/annonces/meubles --> http://monsite.com?sub=en&menu=annon...brique=meubles

    Pas de problème pour récupérer le sous-domaine depuis la page d'accueil http://en.monsite.com, mais pour http://en.monsite.com/login, je n'arrive qu'à récupérer la première variable sub=en, mais pas la deuxième menu=login. Donc je reste figé sur la page d'accueil, comme si les autres variables (menu, ad, section_name, etc.) ne passaient pas pour les redirections suivantes.

    Voici mes changements en fonction de ce que tu m'as indiqué plus haut :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    RewriteCond %{REQUEST_URI} ^/$
     
    RewriteCond %{HTTP_HOST} ^([a-z]+)\.monsite\.com$ [NC]
    RewriteRule ^(.*) ?sub=%1 [NC,L]
     
    RewriteCond %{HTTP_HOST} ^([a-z]+)\.monsite\.com$ [NC]
    RewriteRule ^login$ ?sub=%1&menu=login [L]
     
    RewriteCond %{HTTP_HOST} ^([a-z]+)\.monsite\.com$ [NC]
    RewriteRule ^register$ ?sub=%1&menu=register [L]
     
    RewriteCond %{HTTP_HOST} ^([a-z]+)\.monsite\.com$ [NC]
    RewriteRule ^([-a-z0-9]+)-([A-Za-z0-9]+)\.html$ ?sub=%1&menu=ad&ad=$2 [L]
     
    RewriteCond %{HTTP_HOST} ^([a-z]+)\.monsite\.com$ [NC]
    RewriteRule ^ads\/([-A-Za-z0-9]+)\/([-A-Za-z0-9]+)\/([-A-Za-z0-9]+)$ ?sub=%1&menu=ads&section_name=$1&category_name=$2&subCategory_name=$3 [L]
    Voilà, j'espère avoir été un peu plus clair. Merci pour ton aide.

  6. #6
    Membre éprouvé Avatar de Marc3001
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2008
    Messages
    829
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2008
    Messages : 829
    Points : 1 275
    Points
    1 275
    Par défaut
    Cela semble être un souci avec ta première règle qui match toutes les requêtes.

    Pourtant la première RewriteCond devrait empêcher ça même si elle pourrait être intégrée directement à la RewriteRule.

    Essaie de cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    RewriteCond %{HTTP_HOST} ^([a-z]+)\.monsite\.com$ [NC]
    RewriteRule ^/$ ?sub=%1 [NC,L]
     
    RewriteCond %{HTTP_HOST} ^([a-z]+)\.monsite\.com$ [NC]
    RewriteRule ^/login$ ?sub=%1&menu=login [L]
     
    RewriteCond %{HTTP_HOST} ^([a-z]+)\.monsite\.com$ [NC]
    RewriteRule ^/register$ ?sub=%1&menu=register [L]
     
    RewriteCond %{HTTP_HOST} ^([a-z]+)\.monsite\.com$ [NC]
    RewriteRule ^/([-a-z0-9]+)-([A-Za-z0-9]+)\.html$ ?sub=%1&menu=ad&ad=$2 [L]
     
    RewriteCond %{HTTP_HOST} ^([a-z]+)\.monsite\.com$ [NC]
    RewriteRule ^/ads\/([-A-Za-z0-9]+)\/([-A-Za-z0-9]+)\/([-A-Za-z0-9]+)$ ?sub=%1&menu=ads&section_name=$1&category_name=$2&subCategory_name=$3 [L]
    Le logiciel, c'est comme le sexe, c'est meilleur quand c'est libre.

    Linus Torvalds

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Bonjour Marc3001,

    Toutes les règles fonctionnent, sauf la première qui n'a aucun effet.

    Si tu as d'autres suggestions, je suis preneur.

    Merci pour ton aide.

  8. #8
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Dans un .htaccess, le premier membre d'une RewriteRule ne peut commencer par ^/ car Apache retire le premier / des URL à tester. Il faut donc plutôt écrire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    RewriteCond %{HTTP_HOST} ^([a-z]+)\.monsite\.com$ [NC]
    RewriteRule ^$ ?sub=%1 [NC,L]
     
    RewriteCond %{HTTP_HOST} ^([a-z]+)\.monsite\.com$ [NC]
    RewriteRule ^login$ ?sub=%1&menu=login [L]
     
    RewriteCond %{HTTP_HOST} ^([a-z]+)\.monsite\.com$ [NC]
    RewriteRule ^register$ ?sub=%1&menu=register [L]
     
    RewriteCond %{HTTP_HOST} ^([a-z]+)\.monsite\.com$ [NC]
    RewriteRule ^([-a-z0-9]+)-([A-Za-z0-9]+)\.html$ ?sub=%1&menu=ad&ad=$2 [L]
     
    RewriteCond %{HTTP_HOST} ^([a-z]+)\.monsite\.com$ [NC]
    RewriteRule ^ads\/([-A-Za-z0-9]+)\/([-A-Za-z0-9]+)\/([-A-Za-z0-9]+)$ ?sub=%1&menu=ads&section_name=$1&category_name=$2&subCategory_name=$3 [L]

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Merci Mac, mais j'en reviens au premier problème : la première redirection fonctionne, mais pas les autres. Du moins, il n'y a que la variable sub qui passe et pas les autres (menu, section_name)...

    Pour simplifier, partons sur les deux premières règles :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    RewriteCond %{HTTP_HOST} ^([a-z]+)\.monsite\.com$ [NC]
    RewriteRule ^$ ?sub=%1&menu=test [NC,L]
     
    RewriteCond %{HTTP_HOST} ^([a-z]+)\.monsite\.com$ [NC]
    RewriteRule ^login$ ?sub=%1&menu=login [L]
    https://en.monsite.com/ ou https://en.monsite.com/login retourne :

    Array
    (
    [sub] => en
    [menu] => test
    )


    On voit que la première règle surpasse toutes les autres.

  10. #10
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Et en rajoutant index.php dans la réécriture ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    RewriteCond %{HTTP_HOST} ^([a-z]+)\.monsite\.com$ [NC]
    RewriteRule ^$ index.php?sub=%1&menu=test [NC,L]
    
    RewriteCond %{HTTP_HOST} ^([a-z]+)\.monsite\.com$ [NC]
    RewriteRule ^login$ index.php?sub=%1&menu=login [L]

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Mac... You saved my day ! Bien joué, merci !

    J'avais trouvé une autre solution sinon, mais plus chiante (à mon sens). Voici ma première règle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    RewriteCond %{HTTP_HOST} ^([a-z]+)\.monsite\.com$ [NC]
    RewriteCond %{QUERY_STRING} !&menu=.*
    RewriteCond %{QUERY_STRING} !&ad=.*
    RewriteCond %{QUERY_STRING} !&section_name=.*
    RewriteCond %{QUERY_STRING} !&category_name=.*
    RewriteRule ^$ ?sub=%1 [NC,L]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. sous domaines virtuels ?
    Par AsQuel dans le forum Domaines
    Réponses: 3
    Dernier message: 07/08/2007, 18h13
  2. Sous domaine virtuel par Htaccess
    Par Nicolas N. dans le forum Apache
    Réponses: 2
    Dernier message: 16/07/2007, 13h06
  3. Sous domaines virtuels
    Par Kael dans le forum Ruby on Rails
    Réponses: 1
    Dernier message: 06/01/2007, 17h59
  4. [INDEPENDANTS] Sous traitence totale pour un site
    Par Dokmicro dans le forum Freelance
    Réponses: 12
    Dernier message: 28/02/2006, 12h01
  5. hote virtuel pour autre site web
    Par vedder dans le forum Apache
    Réponses: 8
    Dernier message: 27/07/2004, 14h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo