2009-08-13 6 views
0

J'essaie de rediriger vers un sous-répertoire pour les fichiers, mais seulement si le fichier existe dans le sous-répertoire. Essentiellement, son modèle a ressemblé à ceci:Rediriger si le fichier existe dans le sous-répertoire

  1. Le fichier existe-t-il régulièrement? Si oui, affichez-le.
  2. Le fichier existe-t-il dans le sous-répertoire? Si oui, redirigez-le.
  3. Si nous sommes à ce stade, acheminez dans un script dynamique à index.php.

La partie la plus difficile a été l'étape 2. Voici ce que j'ai essayé de loin:

RewriteEngine On 
RewriteCond engine/%{SCRIPT_FILENAME} -f [OR] 
RewriteCond engine/%{REQUEST_FILENAME} -d 
RewriteBase /lab 
RewriteRule ^(.*)$ /lab/engine/$1 [P] 

Répondre

2

J'ai réussi à le faire fonctionner en utilisant une méthode légèrement différente. Je vérifie d'abord si le fichier existe dans le sous-répertoire, sinon je passe au contrôleur dynamique - qui inclut une exclusion pour les fichiers réels.

 
DirectoryIndex handle.php 

RewriteEngine On 

# # check if the file exists in "engine" 
# # ...and if found, stop and display it 
RewriteCond %{DOCUMENT_ROOT}/lab/engine/$1 -f 
RewriteRule ^(.*)$ /lab/engine/$1 [L,QSA] 

# If we've gotten here, route to dynamic controller 
RewriteBase /lab 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ handle.php [L,QSA] 
2
# check if the file exists 
# ...and if found, stop and display it 
RewriteCond %{DOCUMENT_ROOT}/engine/%{SCRIPT_FILENAME} -f 
RewriteRule ^(.*)$ /engine/$1 [L,QSA] 

# second try to find its in another directory 
# ...and if found, stop and display it 
RewriteCond %{DOCUMENT_ROOT}/lab/%{SCRIPT_FILENAME} -f 
RewriteRule ^(.*)$ /lab/$1 [L,QSA] 

# default 
RewriteRule ^(.*)$ index.php [L,QSA] 
+0

Merci pour l'aide, mais le problème est que SCRIPT_FILENAME contient réellement le chemin complet du système de fichiers. Ainsi, le/engine/est placé à l'emplacement complètement faux dans le chemin. –

+0

puis juste analyser le nom du fichier de script avec une dernière instance avant de le faire. – RiddlerDev

+1

Vous pouvez également essayer% {REQUEST_URI} – deepwell

Questions connexes