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 :

[URL rewriting] Sous-domaine et variables d'URL


Sujet :

Apache

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 20
    Par défaut [URL rewriting] Sous-domaine et variables d'URL
    Bonjour à tous,

    J'ai ici un petit code me permettant de faire un sous-domaine virtuel.
    Si on tape "test.mondomaine.net", on pointe vers "view/index.php" et le nom du sous domaine (ici "test") est envoyé comme variable "id".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^(\w{3,}).monsite.net
    RewriteCond %1 !^(www)
    RewriteRule ^([a-zA-Z0-9\-\_\.\/]*)$ view/index.php?id=%1&query=$1 [L]
    Ce code fonctionne à merveille. Mais maintenant, j'aimerais aller plus loin et faire en sorte que lorsqu'on tape "test.mondomaine.net/coucou" on pointe toujours vers "view/index.php" mais avec une variable pour récupréer le sous-domaine (ici "text") et une autre variable pour récupérer le sous-dossier (ici "coucou").

    Est-ce que quelqu'un aurait une idée ?

    D'avance un tout grand merci

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 20
    Par défaut
    J'ai trouvé un début de solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    RewriteEngine On 
    RewriteCond %{HTTP_HOST}    !^www.monsite.net
    RewriteCond %{HTTP_HOST}    ^([^.]+).monsite.net
    RewriteRule ^$              /view_desktop/index.php?sous_domaine=%1 
    RewriteRule ^([0-9a-zA-Z_]*)$  /view_desktop/index.php?sous_domaine=%1&code_page=$1 [L]
    Dans le fichier index.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php
    print($_REQUEST['sous_domaine']."<br />");
    print($_REQUEST['code_page']."<br />");
    ?>
    Si je tape "test.monsite.net". Le script affiche bien "test".
    Mais si je tape "test.monsite.net/coucou". Le script affiche "coucou" mais pas "test". Comme si seul une variable passait.

    Est-ce que quelqu'un pourrait m'aider ?

  3. #3
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    Les RewriteCond s'appliquent (uniquement) au RewriteRule qui suit. Vous devez donc les reproduire pour votre autre RewriteRule.

    Il faut donc écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    RewriteCond %{HTTP_HOST} !=www.monsite.net
    #RewriteCond %{REQUEST_URI} !=/view_desktop/index.php
    RewriteCond %{HTTP_HOST} ^([^.]+).monsite.net
    RewriteRule ^$ /view_desktop/index.php?sous_domaine=%1 [L]
     
    RewriteCond %{HTTP_HOST} !=www.monsite.net
    #RewriteCond %{REQUEST_URI} !=/view_desktop/index.php
    RewriteCond %{HTTP_HOST} ^([^.]+).monsite.net
    RewriteRule ^([0-9a-zA-Z_]+)$  /view_desktop/index.php?sous_domaine=%1&code_page=$1 [L]
    On doit aussi pouvoir utiliser une assertion négative pour n'avoir plus qu'une RewriteCond sur %{HTTP_HOST} :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #RewriteCond %{REQUEST_URI} !=/view_desktop/index.php
    RewriteCond %{HTTP_HOST} ^((?!www)\w{3,})\.monsite\.net$
    RewriteRule ^$ /view_desktop/index.php?sous_domaine=%1&query=$1 [L]
     
    #RewriteCond %{REQUEST_URI} !=/view_desktop/index.php
    RewriteCond %{HTTP_HOST} ^((?!www)\w{3,})\.monsite\.net$
    RewriteRule ^([a-zA-Z0-9_./-]+)$ /view_desktop/index.php?sous_domaine=%1&query=$1 [L]
    Même normalement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    RewriteCond %{HTTP_HOST} ^((?!www)\w{3,})\.monsite\.net$
    #RewriteCond %{REQUEST_URI} !=/view_desktop/index.php
    RewriteRule ^[a-zA-Z0-9_./-]*$ /view_desktop/index.php?sous_domaine=%1&query=$0 [L]
    Le script est tout de même capable de gérer un $_GET['query'] vide ?

    Un test sur REQUEST_URI (et éventuellement QUERY_STRING) est certainement nécessaire pour éviter une boucle infinie de réécriture ou alors une règle spécifique prioritaire de non-réécriture flaguée L(ast).

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 20
    Par défaut
    Super, ça marche. Merci beaucoup d'y avoir passé du temps !

    Par contre, je me rends compte que ce que je cherche a faire est encore plus compliqué" que ça. (enfin pour moi en tous cas).

    Dans le dossier "view_desktop", j'ai plusieurs fichiers.
    J'aimerais pourvoir accéder à tous ces fichiers en leur donnant le sous-domaine et le sous-dossier comme variable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    URL d'origine
    http://sous-domaine.mondomaine.net/sous-dossier/fichier.php
     
    Emplacement sur serveur
    view_desktop/fichier.php?sous-domaine=$sous-domaine&sous-dossier=$sous-dossier
    Sachant que "fichier.php" peut être aussi index.php, admin.php,...et donc variable.

    Je ne sais pas si c'es très clair ?

    Encore un tout grand merci.

  5. #5
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #RewriteCond %{REQUEST_URI} !^.../view_desktop/
    RewriteRule ^(.+/)?([^/]+)$ view_desktop/$2?sous-domaine=%1&sous-dossier=$1 [L]


    Mais il faut gérer la boucle infinie (cf commentaire dans mon post précédent). Par contre, il serait peut être plus facile de déterminer si le fichier existe (options -d/-f/-l) pour faire ou non cette réécriture/redirection ?

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 20
    Par défaut
    Bonjour,

    J'avoue que là, ça commence à dépasser mes compétences ;-)
    Je pense que le plus simple serait de rediriger n'importe quoi provenant de "sous-domaine.mondomaine.net/sous-dossier" vers "view_desktop" en utilisant l'url rewriting et ensuite récupérer via PHP le sous-domaine et le sous-dossier comme variable (avec $_SERVER).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    RewriteEngine On 
    RewriteCond %{HTTP_HOST} !=www.mondomaine.net
    RewriteCond %{HTTP_HOST} ^([^.]+).mondomaine.net
    RewriteRule ^([0-9a-zA-Z_.]+)$ /view_desktop/ [L]
     
    RewriteCond %{HTTP_HOST} !=www.mondomaine.net
    RewriteCond %{HTTP_HOST} ^([^.]+).mondomaine.net
    RewriteRule ^([0-9a-zA-Z_.]+)/([0-9a-zA-Z_.]+)$  /view_desktop/$2 [L]
    Ce code ne fonctionne pas. Sauf si je remplace :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^([0-9a-zA-Z_.]+)/([0-9a-zA-Z_.]+)$  /view_desktop/$2
    Par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^([0-9a-zA-Z_.]+)-([0-9a-zA-Z_.]+)$  /view_desktop/$2
    Mais c'est peut-être mon hébergeur (OVH) qui n'accepte pas les "/" dans les adresses virtuelle...

Discussions similaires

  1. [URL rewriting] Sous-domaine et multi-variables
    Par guillaumeIOB dans le forum Apache
    Réponses: 1
    Dernier message: 22/10/2012, 23h15
  2. Réponses: 3
    Dernier message: 15/04/2010, 13h27
  3. Réponses: 7
    Dernier message: 10/07/2008, 01h52
  4. [URL REWRITING] Sous Domaine + Variables
    Par Early Reflexions dans le forum Apache
    Réponses: 3
    Dernier message: 28/12/2007, 01h58
  5. Réponses: 1
    Dernier message: 06/12/2007, 17h13

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