2009-08-13 7 views
0

ファイルのサブディレクトリにリダイレクトしようとしていますが、ファイルがサブディレクトリに存在する場合はのみです。基本的には、次のようにモデル化されています。ファイルがサブディレクトリに存在する場合のリダイレクト

  1. ファイルは定期的に存在しますか?表示されている場合は、表示してください。
  2. ファイルはサブディレクトリに存在しますか?もしそうなら、それにリダイレクトしてください。
  3. この時点であれば、index.phpの動的スクリプトにルーティングしてください。

タフな部分はここで私はこれまでに試したものだステップ2.されています:

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

答えて

2

私はそれがわずかに異なる方法を使用して仕事を得ることができました。最初にファイルがサブディレクトリに存在するかどうかをチェックします。そうでなければ、実際のファイルの除外を含むダイナミックコントローラに進みます。

 
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

助けてくれてありがとうございますが、問題はSCRIPT_FILENAMEが実際に完全なファイルシステムパスを含んでいることです。したがって、/ engine /は完全に間違った場所に置かれます。 –

+0

これを行う前に、スクリプトファイル名の最後のインスタンスを解析します。 – RiddlerDev

+1

また、%{REQUEST_URI} – deepwell

関連する問題