私は、人々が自分のファイルをuploads
ディレクトリにアップロードできるLaravel Webアプリケーションを持っています。 私は任意のファイルの種類と名前を許可しますが(単なる静的ファイルのアップロード/ダウンロード)それらを実行できないようにしたいので、私は.htaccess
ファイル作成:php_flagエンジンがオフになっている静的ファイルにアクセスできない
/public_html/uploads/.htaccess:
php_flag engine off
しかし、保存されたファイル(例:/uploads/photo.jpg)にアクセスしようとすると、LaravelはNotFoundHttpException
となります。 私は#
を行の前に置くとファイルにアクセスできますが、その後はPHPスクリプトが実行されます。
そしてここにはLaravelのhtaccessのファイル
/public_html/uploads/.htaccessです:
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule^index.php [L]
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
</IfModule>
ありがとうございます。サーバーに余分なオーバーヘッドが加わっていませんか?なぜなら、PHPプロセスは、クライアントが最後のビットを取得するまで実行し続ける必要があるからです。 また、大きなファイルではPHPの最大実行時間が不十分かもしれません – Webinan
あなたが言うことは@Webinanが真実ですが、希望の機能を持つ領域の周りに 'set_time_limit(int)'を使用することができます。ファイルを送信するオーバーヘッドは、Laravelのヘルパーを使用して最小限に抑えられます。 Apacheは、PHPの電源をオフにしない限り、またはファイルの内容を最初にバッファに読み込んだ後にバイナリコンテンツとしてファイルを送信しない限り、要求されたPHPファイルを常に実行します。 –