Bonjour,

Je voudrais rediriger les URL de type http://localhost/monsite/XXX/ vers http://localhost/monsite/index.php?url=XXX

J'ai trouvé plusieurs exemples qui proposent d'utiliser une condition sur REQUEST_FILENAME mais apparemment ça ne fonctionne pas.

Je m'explique.

Voici mon arborescence
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
/monsite
  /modules
  /public
	/css
	/images
	/js
	index.php
	.htaccess
  /templates
  /tmp
/monsite se trouve ici D:\Mes Documents\Mes Projets\PHP\monsite

J'utilise WampServer 2.0

Je créer donc un alias vers D:\Mes Documents\Mes Projets\PHP\monsite\public\ avec l'utilitaire de wamp.

Il me créer ce fichier
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
Alias /monsite/ "D:/Mes Documents/Mes Projets/PHP/monsite/public/" 
 
<Directory "D:/Mes Documents/Mes Projets/PHP/monsite/public/">
    Options Indexes FollowSymLinks MultiViews
    AllowOverride all
    Order allow,deny
    Allow from all
</Directory>
J'accède donc a mon site via http://localhost/monsite/index.php

J'active rewrite_module dans wamp et je créer un fichier .htaccess avec le contenu suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ /monsite/index.php?url=$1 [QSA,L]
</IfModule>
Si j'appelle l'url http://localhost/monsite/ tout se passe bien.

Pour l'url http://localhost/monsite/XXX/ ça m'affiche la bonne page mais aucun templates, scripts js ou css ne sont utilisés (idem pour http://localhost/monsite/XXX/YYY/ZZZ/) .

J'ai donc vérifié ce que contenait REQUEST_FILENAME comme ça

Code : Sélectionner tout - Visualiser dans une fenêtre à part
RewriteRule ^(.*)$ /monsite/index.php?url=$1&f=%{REQUEST_FILENAME} [QSA,L]
ce qui donne

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
Array
(
    [url] => XXX/
    [f] => D:/Mes Documents/Mes Projets/PHP/monsite/public/XXX
)
De plus même si je demande http://localhost/monsite/XXX/YYY/ZZZ/, REQUEST_FILENAME sera toujours égale à D:/Mes Documents/Mes Projets/PHP/monsite/public/XXX

En gros quand ma page demande le fichier css/style.css apache vérifie dans D:/Mes Documents/Mes Projets/PHP/monsite/public/XXX/css/style.css. Ce qui fait que les conditions seront forcement vraies et qu'il redirigera toutes les urls des fichiers et qu'il ne les trouvera pas.

Si quelqu'un peut m'aider à comprendre et régler mon problème, je suis preneur.