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 :

Problème VirtualHost + Alias + URL Rewriting


Sujet :

Apache

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Problème VirtualHost + Alias + URL Rewriting
    Bonjour à tous,

    Je fais appels aux pointures qui fréquentent ce forum car je bloque sur un problème qui commence à me rendre fou et que je n'arrive pas à comprendre ni résoudre.

    Je viens d'installer un serveur Apache sur mon serveur Windows 2003 qui va devoir héberger trois sites.
    Dans le dossier 1 "C:/www/dev/dossier1/" j'ai la partie commerciale d'un site.
    Dans le dossier 2 "C:/www/dev/dossier2/" j'ai la partie extranet qui sera accessible par les trois sites.

    Dans le dossier 2 j'ai un .htaccess qui va réécrire tous mes URLs de manière assez simple, exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^page/$ page.php [L]

    Pour tester ca en local dans mon fichier host de Windows je fais le lien entre ma future adresse internet et l'adresse ip de mon serveur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    192.168.1.106     www.monsite.com
    Je créé un Virtual Host dans mon httpd-vhosts.conf :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    NameVirtualHost *:80
    
    <VirtualHost *:80>
    	ServerName www.monsite.com
    	ServerAlias monsite.com *.monsite.com
    	DocumentRoot "C:/www/dev/dossier1/"
    	Alias /extranet/ "C:/www/dev/dossier2/"
    </VirtualHost>

    Si j'accède à http://www.monsite.com, j'ai bien l'index de mon DocumentRoot, jusqu'ici tout va bien.

    Si j'accède directement à la page http://www.monsite.com/extranet/page.php sans passer par l'URL Rewriting ca fonctionne bien.

    Par contre si j'accède à http://www.monsite.com/extranet/page/ il me renvoi une erreur 404 en me disant :
    Not Found. The requested URL /www/dev/dossier2/page.php was not found on this server.

    Donc j'ai l'impression qu'il essaye de chercher page.php dans le dossier : c:/www/dev/dossier1/www/dev/dossier2/. Mais pourquoi veut il aller chercher cette page dans le dossier du DocumentRoot alors qu'elle est censée se trouver dans le dossier de l'alias "extranet" ?

    J'ai fait un test en remplaçant dans la définition du Virtual Host la ligne :
    DocumentRoot "C:/www/dev/dossier1/"
    par
    DocumentRoot "C:/www/dev/"
    et quand je retente d'accéder à http://www.monsite.com/extranet/page/ là tout fonctionne bien !

    Donc je ne comprends pas du tout pourquoi l'accès a une page qui a été réécrite est différent quand le dossier vers lequel pointe l'Alias se trouve en dehors du DocumentRoot !

    J'espère avoir donné tous les éléments nécessaires à la bonne compréhension de mon problème. En espérant que quelqu'un ait déjà rencontré ce comportement et puisse me donner une solution pour régler ca.

    Merci d'avance et bonne soirée !

    Sylvain

  2. #2
    Expert éminent sénior

    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
    Points : 17 777
    Points
    17 777
    Par défaut
    Il faut indiquer l'URL réelle avec RewriteBase parce que dans le cas d'un Alias, Apache ne saura pas la retrouver en se basant sur le système de fichiers.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    RewriteEngine On
    RewriteBase /extranet/
    RewriteRule ^page/$ page.php [L]

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Ca marche !

    Merci beaucoup pour ton aide julp !

    Bonne journée.

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Problème plusieurs RewriteBase dans un .htaccess
    Finalement le RewriteBase m'a apporté un autre soucis.

    Disons que j'ai mon vhost avec 3 alias différents qui pointent sur un même dossier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    NameVirtualHost *:80
     
    <VirtualHost *:80>
    	ServerName www.monsite.com
    	ServerAlias monsite.com *.monsite.com
    	DocumentRoot "C:/www/dossier1/"
    	Alias /site1/ "C:/www/dossier2/"
            Alias /site2/ "C:/www/dossier2/"
            Alias /site3/ "C:/www/dossier2/"
    </VirtualHost>
    J'ai des fichiers communs pour les trois sites qui se trouvent à la racine de "C:/www/dossier2/", les pages spécifiques à chaque site se trouvent dans les dossiers "C:/www/dossier2/site1", "C:/www/dossier2/site2" et "C:/www/dossier2/site3".

    Dans le .htaccess qui se trouve à racine de "C:/www/dossier2/" je voudrais pouvoir attribuer un RewriteBase et DirectoryIndex différent suivant l'alias utilisé, j'ai donc essayé quelque chose comme ca :

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    RewriteEngine On
     
    RewriteCond %{REQUEST_URI} !^/site1/
    RewriteRule (.*) - [S=20]
    RewriteBase /site1/
    DirectoryIndex site1/index.php
    RewriteRule ^page/$ site1/page.php [L]
    ...
    ...
     
    RewriteCond %{REQUEST_URI} !^/site2/
    RewriteRule (.*) - [S=20]
    RewriteBase /site2/
    DirectoryIndex site2/index.php
    RewriteRule ^page/$ site2/page.php [L]
    ...
    ...
     
    RewriteCond %{REQUEST_URI} !^/site3/
    RewriteRule (.*) - [S=20]
    RewriteBase /site3/
    DirectoryIndex site3/index.php
    RewriteRule ^page/$ site3/page.php [L]
    ...
    ...
    Le soucis c'est que j'ai l'impression que le flag SKIP ne saute pas les lignes RewriteBase et DirectoryIndex, du coup ce sont les premières occurrences pour le "site1" qui s'appliquent aux trois autres.

    D'où ma question : Sauriez-vous comment je peux attribuer dans un seul .htaccess un RewriteBase et DirectoryIndex différent suivant l'alias utilisé dans un vhost ?

    Merci d'avance,

    bonne soirée à tous !

  5. #5
    Expert éminent sénior

    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
    Points : 17 777
    Points
    17 777
    Par défaut
    L'option skip ne concerne que les règles de réécriture. Toute autre directive n'est pas concernée et sera traitée normalement.

    J'ai un doute : quelles sont les URL de base de vos différents sites (alias) ainsi que leur "racine" respective ? Idem, la directive RewriteBase ayant un contexte de répertoire, j'ai peur qu'elle ne soit traitée de la même manière que DirectoryIndex, donc une éventuelle solution en réécriture pure serait alors impossible.

    En fait que partagez-vous ainsi ?

  6. #6
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par julp Voir le message
    J'ai un doute : quelles sont les URL de base de vos différents sites (alias) ainsi que leur "racine" respective ?
    Et bien en fait pour chaque site j'ai un vhost différent mais avec les mêmes alias, ca se présenterait comme ca :


    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    <VirtualHost *:80>
    	ServerName <a href="http://www.monsite1.com" target="_blank">www.monsite1.com</a>
    	ServerAlias monsite1.com *.monsite1.com
    	DocumentRoot "C:/www/dossier1/"
    	Alias /partie1/ "C:/www/dossier4/"
            Alias /partie2/ "C:/www/dossier4/"
            Alias /partie3/ "C:/www/dossier4/"
    </VirtualHost>
     
    <VirtualHost *:80>
    	ServerName <a href="http://www.monsite2.com" target="_blank">www.monsite2.com</a>
    	ServerAlias monsite2.com *.monsite2.com
    	DocumentRoot "C:/www/dossier2/"
    	Alias /partie1/ "C:/www/dossier4/"
            Alias /partie2/ "C:/www/dossier4/"
            Alias /partie3/ "C:/www/dossier4/"
    </VirtualHost>
     
    <VirtualHost *:80>
    	ServerName <a href="http://www.monsite3.com" target="_blank">www.monsite3.com</a>
    	ServerAlias monsite3.com *.monsite3.com
    	DocumentRoot "C:/www/dossier3/"
    	Alias /partie1/ "C:/www/dossier4/"
            Alias /partie2/ "C:/www/dossier4/"
            Alias /partie3/ "C:/www/dossier4/"
    </VirtualHost>
    Citation Envoyé par julp Voir le message
    En fait que partagez-vous ainsi ?
    Ce que je partage entre les trois sites c'est un même extranet qui est lui même découpé en trois parties. Certaines pages communes aux trois parties de l'extranet se trouvent dans "C:/www/dossier4/", et les pages spécifiques à chaque partie se trouvent dans trois sous-dossiers ("C:/www/dossier4/partie1/", "C:/www/dossier4/partie2/", "C:/www/dossier4/partie3/").
    Il y a uniquement l'habillage qui diffère suivant le site qui est accédé.
    Ce que je voulais faire à la base c'est gérer l'accès aux trois parties avec un seul .htaccess, en changeant le RewriteBase selon l'alias utilisé, ce que je n'arrive pas à faire.

    Du coup la solution que j'ai trouvé pour le moment est de rajouter un alias qui sera accessible par les trois parties :

    Alias /commun/ "C:/www/dossier4/"
    Alias /partie1/ "C:/www/dossier4/partie1/"
    Alias /partie2/ "C:/www/dossier4/partie2/"
    Alias /partie3/ "C:/www/dossier4/partie3/"

    Du coup j'ai quatre .htaccess différents mais je ne vois pas comment faire autrement.

Discussions similaires

  1. [1.x] Problème routing et url rewriting ?
    Par symfony30000 dans le forum Symfony
    Réponses: 22
    Dernier message: 09/06/2010, 00h38
  2. Problème simple d'url rewriting
    Par mims1664 dans le forum Apache
    Réponses: 3
    Dernier message: 02/02/2009, 11h39
  3. Problème avec l'url rewriting
    Par sami_c dans le forum Apache
    Réponses: 6
    Dernier message: 02/09/2008, 10h22
  4. Problème d'URL rewriting
    Par Metallic-84s dans le forum Apache
    Réponses: 7
    Dernier message: 25/04/2006, 15h58
  5. [htaccess] Problème d'url rewriting
    Par scorpiwolf dans le forum Apache
    Réponses: 4
    Dernier message: 02/12/2005, 19h21

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