Plusieurs directives RewriteBase et DirectoryIndex dans un .htaccess ?

Phara

Nouveau WRInaute
Bonjour à tous,

Je fais appel à vos connaissances car je bloque sur un petit soucis d'htaccess que je n'arrive pas à solutionner.

J'ai un vhost dans ma configuration d'Apache avec 3 alias différents qui pointent sur un même dossier :

Code:
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:
RewriteEngine On

RewriteCond %{REQUEST_URI} !^/site1/
RewriteRule (.*) - [S=20]
RewriteBase /site1/
DirectoryIndex site1/index.php
RewriteRule ^page/$ site1/page.php [L]
...
...
RewriteRule ^page18/$ site1/page18.php [L]

RewriteCond %{REQUEST_URI} !^/site2/
RewriteRule (.*) - [S=20]
RewriteBase /site2/
DirectoryIndex site2/index.php
RewriteRule ^page/$ site2/page.php [L]
...
...
RewriteRule ^page18/$ site2/page18.php [L]

RewriteCond %{REQUEST_URI} !^/site3/
RewriteRule (.*) - [S=20]
RewriteBase /site3/
DirectoryIndex site3/index.php
RewriteRule ^page/$ site3/page.php [L]
...
...
RewriteRule ^page18/$ site3/page18.php [L]

Le soucis c'est que le flag SKIP ne saute pas les directives RewriteBase et DirectoryIndex, uniquement les directives RewriteRule, du coup ce sont les premières occurrences de RewriteBase et DirectoryIndex pour le "site1" qui s'appliquent aux trois autres.

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

Merci d'avance !
 

forty

WRInaute passionné
si tu mets Directoryindex sans répertoire il recherche dans le répertoire courant :
Code:
DirectoryIndex index.php
RewriteBase est inutile normalement si tu mets le chemin complet depuis la racine :
Code:
RewriteRule ^site1/page/$ /site1/page.php [L]
...
...
RewriteRule ^page18/$ site1/page18.php [L]
tu peux peut-être même mettre en une seule ligne toutes tes pageXX :
Code:
RewriteRule ^site1/page([0-9]*)/$ /site1/page$1.php [L]
 

Phara

Nouveau WRInaute
Merci pour ta réponse forty !

forty a dit:
si tu mets Directoryindex sans répertoire il recherche dans le répertoire courant :
Code:
DirectoryIndex index.php

Oui effectivement mais dans ce cas si j'accède à http://www.monsite.com/site1/ je vais avoir l'index qui se trouve dans "C:/www/dossier2/" alors que je veux accéder à celui qui se trouve dans "C:/www/dossier2/site1/", même chose pour le "site2" et "site3" vu que l'alias pointe sur le même dossier.

forty a dit:
RewriteBase est inutile normalement si tu mets le chemin complet depuis la racine :
Code:
RewriteRule ^site1/page/$ /site1/page.php [L]

Malheureusement cela ne fonctionne pas dans le cas d'un alias, il faut indiquer l'URL réelle avec RewriteBase.

Citation tirée de la doc d'apache concernant la directive RewriteBase :
If your webserver's URLs are not directly related to physical file paths, you will need to use RewriteBase in every .htaccess file where you want to use RewriteRule directives.

forty a dit:
tu peux peut-être même mettre en une seule ligne toutes tes pageXX :
Code:
RewriteRule ^site1/page([0-9]*)/$ /site1/page$1.php [L]

oui c'est vrai mais là c'était juste pour l'exemple, chaque page a un nom différent dans mon .htaccess.
 

forty

WRInaute passionné
alors avec :
Code:
RewriteRule ^site1/page/$ /dossier2/site1/page.php [L]

c'est pas l'alias qui est faux plutôt?
Code:
Alias /site1 "C:/www/dossier2/site1"
Alias /site2 "C:/www/dossier2/site2"
Alias /site3 "C:/www/dossier2/site3"
 

Phara

Nouveau WRInaute
forty a dit:
alors avec :
Code:
RewriteRule ^site1/page/$ /dossier2/site1/page.php [L]

non cela ne marche pas non plus, j'obtiens une erreur 404. RewriteBase semble obligatoire dans mon cas de figure.

forty a dit:
c'est pas l'alias qui est faux plutôt?
Code:
Alias /site1 "C:/www/dossier2/site1"
Alias /site2 "C:/www/dossier2/site2"
Alias /site3 "C:/www/dossier2/site3"

Non les alias ne sont pas faux, mais peut-être pas adapté pour ce que je veux faire.
Le problème si je mets les alias que tu me donnes est que je ne pourrais plus accéder aux fichiers communs qui se trouvent à la racine de "C:/www/dossier2/" car si je tente d'accéder au dossier parent d'un de mes alias je vais tomber sur le DocumentRoot de mon vhost qui pointe sur "C:/www/dossier1/".
En créant un quatrième alias pointant sur "C:/www/dossier2/" je vais peut-être pouvoir m'en sortir mais j'aurais vraiment aimé éviter cela pour ne pas compliquer la chose.
 

Discussions similaires

Haut