Reecriture de sous domaines dynamique avec variables

Discussion dans 'URL Rewriting et .htaccess' créé par rocca, 20 Novembre 2007.

  1. rocca
    rocca Nouveau WRInaute
    Inscrit:
    30 Mai 2007
    Messages:
    33
    J'aime reçus:
    0
    La gestion des sous domaines dynamiques à été activé sur mon serveur dédié OVh (modification : etc/named.conf et usr/local/apache/conf/httpd.conf ).
    Je chercher a effectuer des reecriture pour des sous domaines dynamques ( ex : categorie-jouet.monsite.com qui appel la page cat-detail.php?lacat=jouet ).

    J'ai deja trouvé une première ébauche qui me permet de faire ca :

    categorie-jouet.monsite.com -> monsite.com/test.php?lacat=jouet

    avec ceci :

    Code:
    RewriteCond   %{HTTP_HOST}   !^www\.monsite\.com$ [NC] 
    RewriteCond   %{HTTP_HOST}    ^categorie-([a-z0-9_-]+)\.monsite\.com$ [NC] 
    RewriteRule   ^(.*)                     detail.php?lacat=%1 [NC,L]

    Par contre est il possible a votre avis d'éffectuer cette reecriture avec deux ou plusieurs variables ?
    car j'aimerais également faire une reecriture d'url de ce type en plus de la première présentée ci dessus :

    exemple :

    categorie-jouet.monsite.com/page-19.html -> monsite.com/test.php?lacat=jouet&lapage=19



    Merci par avance.

    Julien
     
  2. lothar
    lothar WRInaute passionné
    Inscrit:
    12 Juillet 2003
    Messages:
    1 473
    J'aime reçus:
    0
    Chouette, plein de sous-domaines générés automatiquement.
     
  3. KOogar
    KOogar WRInaute accro
    Inscrit:
    16 Novembre 2004
    Messages:
    4 528
    J'aime reçus:
    0
    Je ne vois pas pourquoi tu parles de sous domaines dynamiques... tu les a creer manuellement si je ne me trompe pas?

    Pour la reecriture, il te faut prendre l'ensemble de la chaine et capturer le contenu de la variable "lapage"

    Code:
    RewriteCond   %{HTTP_HOST}   !^www\.monsite\.com$ [NC]
    RewriteCond   %{HTTP_HOST}    ^categorie-([a-z0-9_\-]+)\.monsite\.com$ [NC]
    RewriteRule   page-([0-9]+)\.html  test.php?lacat=%1&lapage=$1 [QSA,NC,L]
     
  4. rocca
    rocca Nouveau WRInaute
    Inscrit:
    30 Mai 2007
    Messages:
    33
    J'aime reçus:
    0
    Super KOogar ca marche !
    Par contre j'arrive bien a recupéré les deux variables mais si j 'en ai besoin juste d'une
    cela ne fonctionne plus.

    Je m'explique pour la première page j'ai pas besoin de recupéré la variable page donc
    je veux faire :
    categorie-jouet.monsite.com -> test.php?lacat=jouet
    et si je declare la variable page dans l'url :
    categorie-jouet.monsite.com/page-4.html -> test.php?lacat=jouet&lapage=4

    J'ai essayé de déclarer deux fois les conditions :

    Code:
    RewriteCond   %{HTTP_HOST}   !^www\.monsite\.com$ [NC] 
    RewriteCond   %{HTTP_HOST}    ^categorie-([a-z0-9_\-]+)\.monsite\.com$ [NC] 
    RewriteRule   page-([0-9]+)\.html  test.php?lacat=%1&lapage=$1 [QSA,NC,L]
    
    RewriteCond   %{HTTP_HOST}   !^www\.monsite\.com$ [NC] 
    RewriteCond   %{HTTP_HOST}    ^categorie-([a-z0-9_\-]+)\.monsite\.com$ [NC] 
    RewriteRule   ^(.*)           test.php?lacat=%1 [NC,L]
    Masi cela ne fonctionne pas, a chaque fois il zappr une des deux variables,
    est il possible de déclarer des conditions différentes en fonction de si on
    utlise la variable page ou pas ?

    Merci :roll:
    Julien
     
  5. KOogar
    KOogar WRInaute accro
    Inscrit:
    16 Novembre 2004
    Messages:
    4 528
    J'aime reçus:
    0
    repasse le dernier block en premier et test l'uri. Elle doit etre vide.
    ^/$ : Ne contient que le caratere /
    au cas ou ton serveur ne renvoi pas le caractere /, test aussi cette syntaxe :
    ^$ : Ne contient aucun caractere

    Code:
    RewriteCond %{REQUEST_URI} ^/$
    RewriteRule   ^(.*)   test.php?lacat=%1 [NC,L]
    
     
  6. rocca
    rocca Nouveau WRInaute
    Inscrit:
    30 Mai 2007
    Messages:
    33
    J'aime reçus:
    0
    Merci Koogar,

    Donc il faudrait faire ceci, pour obtenir les deux cas que j'ai cité précédémment , car en faisant ceci j'obtiens une page blanche sur mon serveur ? :

    Code:
    
    RewriteCond %{REQUEST_URI} ^/$ 
    RewriteRule   ^(.*)   test.php?lacat=%1 [NC,L] 
    
    RewriteCond   %{HTTP_HOST}   !^www\.monsite\.com$ [NC] 
    RewriteCond   %{HTTP_HOST}    ^categorie-([a-z0-9_\-]+)\.monsite\.com$ [NC] 
    RewriteRule   page-([0-9]+)\.html  test.php?lacat=%1&lapage=$1 [QSA,NC,L]
    Merci Julien[/code]
     
  7. KOogar
    KOogar WRInaute accro
    Inscrit:
    16 Novembre 2004
    Messages:
    4 528
    J'aime reçus:
    0
    :D ..pour la page blanche

    Si tu enleves les autres condtions cela ne va pas marcher, il faut les garder et tester si l'uri est vide ou non.

    Code:
    RewriteCond   %{HTTP_HOST}   !^www\.monsite\.com$ [NC]
    RewriteCond   %{REQUEST_URI} ^/$
    RewriteCond   %{HTTP_HOST}    ^categorie-([a-z0-9_\-]+)\.monsite\.com$ [NC]
    RewriteRule   ^(.*)           test.php?lacat=%1 [NC,L]
    
    
    RewriteCond   %{HTTP_HOST}   !^www\.monsite\.com$ [NC]
    RewriteCond   %{HTTP_HOST}    ^categorie-([a-z0-9_\-]+)\.monsite\.com$ [NC]
    RewriteRule   page-([0-9]+)\.html  test.php?lacat=%1&lapage=$1 [QSA,NC,L]
     
  8. rocca
    rocca Nouveau WRInaute
    Inscrit:
    30 Mai 2007
    Messages:
    33
    J'aime reçus:
    0
    ah ! tout de suite c'est mieux :p
    ca marche nikel ! merci Koogar pour le coup de main :wink:

    Julien
     
  9. screuscreu
    screuscreu WRInaute impliqué
    Inscrit:
    14 Janvier 2008
    Messages:
    956
    J'aime reçus:
    0
    Oui je sais c'est vieux comme topic mais j'ai un problème très très proche :
    J'ai les mêmes besoins (ou presque que l'auteur de ce message ... mais je parle encore moins le .haccess que le Russe)
    Code:
    RewriteCond   %{HTTP_HOST}   !^www\.example\.com$ [NC]
    RewriteCond   %{REQUEST_URI} ^/$
    RewriteCond   %{HTTP_HOST}    ^([a-z0-9_\-]+)\.example\.com$ [NC]
    RewriteRule   ^(.*)           %1 [NC,L]
    
    avec ça j'ai bien test.example.com qui pointe sur example.com/test : nickel

    Mais avec ça
    Code:
    RewriteCond   %{HTTP_HOST}   !^www\.example\.com$ [NC]
    RewriteCond   %{HTTP_HOST}    ^([a-z0-9_\-]+)\.example\.com$ [NC]
    RewriteRule  ([a-z0-9_\-]+)      %1/$1 [QSA,NC,L]
    
    je n'arrive pas à faire pointer
    test.example.com/news/coucou (remarquez que peux ne pas avoir d'extension ni de nom de fichier)
    sur example.com/test/news/coucou

    J'avoue que je suis un peu perdu, et que j'ai fois en WRI ;)

    Merci d'avance
     
  10. screuscreu
    screuscreu WRInaute impliqué
    Inscrit:
    14 Janvier 2008
    Messages:
    956
    J'aime reçus:
    0
    Code:
    RewriteEngine On
    
    RewriteCond   %{HTTP_HOST}   !^www\.example\.com$ [NC]
    RewriteCond   %{REQUEST_URI} ^/$
    RewriteCond   %{HTTP_HOST}    ^([a-z0-9_\-]+)\. example\.com$ [NC]
    RewriteRule   ^(.*)           %1 [NC,L]
    
    RewriteCond   %{HTTP_HOST}   !^www\. example\.com$ [NC]
    RewriteCond   %{HTTP_HOST}    ^([a-z0-9_\-]+)\. example\.com$ [NC]
    RewriteRule   (.*)    %1/$1 [QSA,NC,L]
    
    D'après ce que j'ai pu lire cela devrait marcher ... mais j'ai une "Internal Server Error"...
    Une piste ?
     
  11. KOogar
    KOogar WRInaute accro
    Inscrit:
    16 Novembre 2004
    Messages:
    4 528
    J'aime reçus:
    0
    tu as raison de dire qu'en théorie ca doit fonctionner. le QSA ne sert a rien donc enleve le, et re essaye en forcant la redirection avec le flag [R]

    Code:
    RewriteCond   %{HTTP_HOST}    ^([a-z0-9_-]+)\.example\.com$ [NC]
    RewriteRule  ^(.*)$   http://www.example.com/%1/$1 [R,L]
    quand le tiret (-) est placé a la fin de la classe, il redevient naturellement un simple caractere
    [a-z0-9_-] est valide, le tiret sera pris en compte