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:
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:
192.168.1.106 www.monsite.com
Je créé un Virtual Host dans mon httpd-vhosts.conf :
Code:
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
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:
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:
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 !