mod_rewrite : dossier virtuel
Bonjour,
Je bute depuis plusieurs jours sur un problème que je n'arrive pas à résoudre avec mod_rewrite.
J'ai la structure suivante:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
|
|_ virtual1
| |_ app
| |_ .htaccess
|_ virtual2
| |_ app
| |_ .htaccess
|_ real
|_ app
|_ index.php
|_ .htaccess
|_ javascript
|_ app.js |
Ce que je veux, c'est que les utilisateurs accèdent à l'application en passant par un des deux accès "virtual", qui vont réécrire les URLs pour requêter dans le dossier "real", tout en ajoutant automatiquement un paramètre à l'URL.
Le contenu du .htaccess dans le dossier "real/app" route toute requête ne correspondant pas à un fichier vers le fichier index.php.
Voici son contenu :
Code:
1 2 3 4
|
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L] |
Finalement voici quelques exemples de réécritures que je souhaite obtenir :
Code:
1 2 3 4 5 6
|
/virtual1/app -> /real/app?p=1
/virtual2/app -> /real/app?p=2
/virtual1/app/whatever -> /real/app/whatever?p=1
/virtual2/app/whatever -> /real/app/whatever?p=2
/virtual1/app/javascript/app.js -> /real/app/javascript/app.js ou /real/app/javascript/app.js?p=1 |
Pouvez-vous m'aider à écrire le contenu des fichiers virtual1/app/.htaccess et virtual2/app/.htaccess ?
Merci d'avance.
EDIT :
J'ai une piste, mais limitée :
Code:
1 2 3
|
RewriteEngine On
RewriteRule ^(.*) /real/app/$1?p=1 [NC,L,QSA] |
Avec ça, si je requête /virtual1/app/toto, j'obtiens ça :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
$_SERVER
array (size=4)
'QUERY_STRING' => string 'p=1' (length=3)
'REQUEST_URI' => string '/virtual1/app/toto' (length=17)
'SCRIPT_NAME' => string '/real/app/index.php' (length=19)
'PHP_SELF' => string '/real/app/index.php' (length=19)
$_GET
array (size=1)
'p' => string '1' (length=1)
app.js loaded |
Le message "app.js loaded" étant signe que le fichier javascript requis dans index.php a été correctement chargé. Le navigateur a demandé /virtual1/app/javascript/app.js.
Par contre, si j'essaie avec /virtual1/app/toto/test, j'obtiens ça :
Code:
1 2 3 4 5 6 7 8 9 10 11
|
$_SERVER
array (size=4)
'QUERY_STRING' => string 'p=1' (length=3)
'REQUEST_URI' => string '/virtual/app/toto/test' (length=22)
'SCRIPT_NAME' => string '/real/app/index.php' (length=19)
'PHP_SELF' => string '/real/app/index.php' (length=19)
$_GET
array (size=1)
'p' => string '1' (length=1) |
La requête arrive correctement à l'index.php, mais le fichier js n'est pas chargé, car le navigateur demande /virtual1/app/toto/javascript/app.js