2012-05-08 13 views
1

[質問]:htaccess reverse directoryここでは逆ルーティングについて質問しました。しかし、私は問題のファイルの代わりにディレクトリビューを取得し続けます。Htaccessのアクセス許可が拒否されている/ディレクトリのインデックスが表示されています

たとえば:私は/img/header.jpgに行きます。ファイル/ header/jpgが存在する間、/ img /というフォルダの内容を取得します。オプションに-Indexesを追加しましたが、403禁止されたアクセスメッセージになります。

htaccessを編集してimgs/js/cssなどを表示するにはどうすればよいですか?ただし、再帰的構造は維持しますか?

現在htacces:事前に

Options +FollowSymLinks -MultiViews -Indexes 
# Turn mod_rewrite on 
RewriteEngine On 
RewriteBase/

RewriteCond %{DOCUMENT_ROOT}/$1/$2.php !-f 
RewriteRule ^(.*?)/([^/]+)/?$ $1/ [L] 

RewriteCond %{DOCUMENT_ROOT}/$1.php -f 
RewriteRule ^(.*?)/?$ $1.php [L] 

おかげ

編集

私はでRewriteBase /直後に次の行を追加しようとしている:

RewriteCond %{REQUEST_FILENAME} !-f 

ほとんどのファイルに対応します。これはimages/css/js/ico/etcの場合にのみ有効です。私は現時点では、それが動作するはずのPHPファイルを直接見つけると思う。

私が理解できないことは、残りのパラメータを取得する方法です。

/index/foo/bar/for/ 

見つかるはずのファイルは、私は$ _GETの中で2残りのパラメータを得るのですか、fooのでしょうか?

答えて

0
にコードを変更し

:OPのコメントに基づいて、このソリューションは、パスの残りの部分とクエリパラメータparamを埋め:

オプション+ FollowSymLinksを-MultiViews -Indexes

# Turn mod_rewrite on 
RewriteEngine On 
RewriteBase/

# If the request is for a valid file 
RewriteCond %{REQUEST_FILENAME} -f [OR] 
# If the request is for a valid link 
RewriteCond %{REQUEST_FILENAME} -l 
# don't do anything 
RewriteRule^- [L] 

# if current ${REQUEST_URI}.php is not a file then 
# forward to the parent directory of crrent REQUEST_URI 
RewriteCond %{DOCUMENT_ROOT}/$1/$2.php !-f 
RewriteRule ^(.*?)/([^/]+)/?$ $1/ [L] 

# if current ${REQUEST_URI}.php is a valid file then 
# load it be removing optional trailing slash 
RewriteCond %{DOCUMENT_ROOT}/$1.php -f 
RewriteRule ^(.*?)/?$ $1.php [L] 

EDIT

# Turn mod_rewrite on RewriteEngine On RewriteBase/ # If the request is for a valid file RewriteCond %{REQUEST_FILENAME} -f [OR] # If the request is for a valid link RewriteCond %{REQUEST_FILENAME} -l # don't do anything RewriteRule^- [L] # if current ${REQUEST_URI}.php is not a file then # forward to the parent directory of crrent REQUEST_URI RewriteCond %{DOCUMENT_ROOT}/$1/$2.php !-f RewriteCond %{QUERY_STRING} ^(?:param=)?(.*)$ RewriteRule ^(.*?)/([^/]+)/?$ $1/?param=$2/%1 [L] # if current ${REQUEST_URI}.php is a valid file then # load it be removing optional trailing slash RewriteCond %{DOCUMENT_ROOT}/$1.php -f RewriteRule ^(.*?)/?$ $1.php [L] 
+0

これはうまくいくようです。左のパラメータを$ _GET ['params']としてどのように取得するのですか?私は3番目の文がチェックされるときにparamsが失われていると思いますか? – John

+0

'$ _GET ['params']'は基本的にはクエリパラメータなので、わかりません。ご覧のとおり、これらのルールはクエリ文字列を操作していません。元のURIが何であるか、それからどのようなふるまいが期待されるのかを教えてもらえればよかったでしょうか? – anubhava

+0

私は/ some/place/foo/barが/some/place.phpに行くことを期待しています。変数$ _GET ['param] =' foo/bar 'を取得します。 – John

関連する問題