1

次の mod 書き換えルールがあります。

RewriteCond %{DOCUMENT_ROOT}/../application/%{REQUEST_URI} -f
RewriteRule ([\w]+\/www\/(.*)) %{DOCUMENT_ROOT}/../../application/$1 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ ./index.php/$1

私のサーバーディレクトリのレイアウトは次のようになります:

/application
--/example
----/www
------/test.jpg
/www <- public root
--/.htaccess
--/index.php

基本的には、次のように index.php にアクセスします。

example.com/test/paths/ < would pass test/paths/ to index.php

example.com/example/www/test.png < would pass example/www/test.png to index.php

example.com/example/www/test.jpg < would output the contents of test.jpg

これで、最初の 2 つの例は完全に機能します。test.jpg (公開されていないディレクトリにある) の内容を出力する最後の例に到達すると、次のエラーが発生します。

このサーバーの /C:/web/git/framework/application/example/www/test.jpg にアクセスする権限がありません。

これを別のパブリック php ファイルに渡し、プライベート ファイルの file_get_contents を実行してそのように表示することもできますが、理想的には、追加の php プロセスを生成したくありません。とにかく、アクセス拒否部分なしでやりたいことを実行できますか?

編集

私は別の方法で問題を解決しました。アプリケーション ディレクトリ全体を www ディレクトリに移動し、この HT ACCESS ファイルを使用して、\w/www/* ディレクトリ内のファイルのみをロードします。

RewriteCond %{REQUEST_URI} ^/[\w]+/www/(.*)$
RewriteCond %{DOCUMENT_ROOT}/applications/%{REQUEST_URI} -f
RewriteRule ([\w]+\/www\/(.*)) /applications/$1 [L]

RewriteCond %{REQUEST_URI} !^/index.php/.*
RewriteRule ^(.*)$ ./index.php/$1
4

1 に答える 1

1

私は別の方法で問題を解決しました。アプリケーション ディレクトリ全体を www ディレクトリに移動し、この HT ACCESS ファイルを使用して、\w/www/* ディレクトリ内のファイルのみをロードします。

RewriteCond %{REQUEST_URI} ^/[\w]+/www/(.*)$
RewriteCond %{DOCUMENT_ROOT}/applications/%{REQUEST_URI} -f
RewriteRule ([\w]+\/www\/(.*)) /applications/$1 [L]

RewriteCond %{REQUEST_URI} !^/index.php/.*
RewriteRule ^(.*)$ ./index.php/$1
于 2013-04-03T15:36:54.873 に答える