Distinguer répertoires virtuels et réels

Nouveau WRInaute
Bonjour,

Je me suis créé un système de répertoires virtuels dans mon .htaccess avec le RewriteRule suivant :
http://www.toto.com/truc/ vers rubrique.php?rep=truc

Enfin bref, tout marche jusqu'ici. Le problème, c'est à propos des répertoires réels. Si je fais http://www.toto.com/fichiers/ (ou 'fichiers/' est un répertoire réel), Apache le prend comme un répertoire virtuel et du coup, j'atterris sur la page rubrique.php?rep=fichiers.

Comment faire en sorte qu'Apache puisse distinguer les répertoires virtuels des répertoires réels, donc ne rediriger que ceux qui sont fictifs vers rubrique.php?rep=xxx et accéder normalement à ceux qui sont réels, sans toucher à l'URL rewriting ?

Merci par avance.
 
WRInaute passionné
ALkyD a dit:
Comment faire en sorte qu'Apache puisse distinguer les répertoires virtuels des répertoires réels, donc ne rediriger que ceux qui sont fictifs vers rubrique.php?rep=xxx et accéder normalement à ceux qui sont réels, sans toucher à l'URL rewriting ?Merci par avance.

Il te faut utiliser un modèle commun pour tes répertoires virtuels de manières à les distinguer des autres, par exemple : -http://www.example.com/r-truc/ , -http://www.example.com/r-truc2/, etc
 
Nouveau WRInaute
Et ensuite ? Comment Apache fait la différence en suivant ton idée ? N'y a-t-il pas un RewriteCond à placer avant ?
 
WRInaute impliqué
ALkyD a dit:
Et ensuite ? Comment Apache fait la différence en suivant ton idée ? N'y a-t-il pas un RewriteCond à placer avant ?

il n'y a rien a ajouter a part le r- dans ton htaccess...

donne moi ton code et je te montrerai comment faire
 
Nouveau WRInaute
Le voilà :

Code:
RewriteRule ^([a-zA-Z0-9_]+)/$ rubrique.php?r_rewrite=$1 [L,QSA]

Ce n'est donc pas possible qu'Apache fasse la différence entre répertoire réel et virtuel sans suivre une charte de nommage pour les noms des dossiers (comme r_ au début des dossiers virtuels) ? C'est quand même sacrément ennuyeux, car si c'est réellement le cas, ça m'oblige à renommer tous mes répertoires virtuels (une quarantaine)... :(
 
WRInaute passionné
Une autre astuce que tu peux utiliser c'est que pour tes répertoires réels tu remplaces les liens pointant vers la racine par des liens pointant vers index.php.

Là du coup, ta règle de réécriture ne s'appliquera pas.
 
WRInaute passionné
ALkyD a dit:
Ce n'est donc pas possible qu'Apache fasse la différence entre répertoire réel et virtuel sans suivre une charte de nommage pour les noms des dossiers?
Si. Il y a un test pour ca, je ne me souviens plus lequel mais il existe. Regarde la doc de RewriteCond.
 
WRInaute accro
Je n'ai pas testé, mais il me semble que tu devrais pouvoir résoudre le problème avec quelque chose comme ceci:
Code:
RewriteRule ^repertoire_reel1\/  -  [L]
RewriteRule ^repertoire_reel2\/  -  [L]
RewriteRule ^repertoire_reel3\/  -  [L]
RewriteRule ^([a-zA-Z0-9_]+)/$ rubrique.php?r_rewrite=$1 [L,QSA]
Jean-Luc
 
Nouveau WRInaute
jeanluc a dit:
Je n'ai pas testé, mais il me semble que tu devrais pouvoir résoudre le problème avec quelque chose comme ceci:
Code:
RewriteRule ^repertoire_reel1\/  -  [L]
RewriteRule ^repertoire_reel2\/  -  [L]
RewriteRule ^repertoire_reel3\/  -  [L]
RewriteRule ^([a-zA-Z0-9_]+)/$ rubrique.php?r_rewrite=$1 [L,QSA]
Jean-Luc
Ca marche pour des répertoires prédéfinis. Mais si j'ai 50 répertoires réels, ca m'oblige à écrire 50 règles...
Je vais regarder la doc de RewriteCond...
 
Nouveau WRInaute
Bonjour, et bonne année,

Si je me suis inscrit à ce forum c'est avant tout pour répondre à ta question.
Personnellement j'utilise les lignes suivantes :
Code:
# Si le fichier existe, ne pas faire la redirection
RewriteCond %{REQUEST_FILENAME} !-f

# Si le répertoire existe, ne pas faire la redirection
RewriteCond %{REQUEST_FILENAME} !-d

Le .htaccess vérifiera donc la présence "physique" des répertoires et fichiers demandés en lien ou dans la barre d'adresse. S'il existe, pas de redirection.

J'espère t'avoir aidé.

P.S. : Un [Résolu] et c'est réglé.
 
Discussions similaires
Haut