У меня есть веб-приложение Laravel, которое позволяет людям загружать свои файлы в каталог uploads
. Я хочу, чтобы любые типы файлов и имен, но запретить их выполнение (только статический файл загрузки/выгрузки), поэтому я создал .htaccess
файл:Не удается получить доступ к статическим файлам, где php_flag engine выключен
/public_html/uploads/.htaccess:
php_flag engine off
Но когда Я пытаюсь получить доступ к сохраненным файлам (например, /uploads/photo.jpg), Laravel - с NotFoundHttpException
. Если я поместил #
перед строкой, я могу получить доступ к файлам, но затем выполняются скрипты php.
А вот файл Htaccess в Laravel в
/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 не отключен, или вы отправляете файл в виде двоичного содержимого после первого чтения содержимого файла в буфер. –