мы используем интегрированный объект Resource TYPO3 Flow 2.3 для загрузки файлов любого типа в наш проект. Определение в нашем File
Объект является:
/**
* @var \TYPO3\Flow\Resource\Resource
* @ORM\ManyToOne
*/
protected $originalresource;
И текучий призыв звучит так:
<a class="filelink" data-icon="{file.filetype}" href="{f:uri.resource(resource: file.originalresource)}" target="_blank">{file.name}</a>
Все в этом созвездии работает нормально, пока пользователь не загрузит файл без конца, как hosts
, Сервер говорит Not Found
в обычном стиле ошибок Apache. Поддерживаются ли файлы без окончаний или нет? Почему это происходит?
Настройка:
TYPO3:
Flow:
resource:
storages:
defaultPersistentResourcesStorage:
storage: 'TYPO3\Flow\Resource\Storage\WritableFileSystemStorage'
storageOptions:
path: '%FLOW_PATH_DATA%Persistent/Resources/'
targets:
localWebDirectoryPersistentResourcesTarget:
target: 'TYPO3\Flow\Resource\Target\FileSystemSymlinkTarget'
targetOptions:
path: '%FLOW_PATH_WEB%_Resources/Persistent/'
baseUri: '_Resources/Persistent/'
И созданная символическая ссылка для hosts
файл в _Resources/Persistent/
именуется хешем, а затем точкой без конца файла, указывающей на фактический файл. Фактический файл существует.
Это ошибка, и вы можете сообщить об этом здесь: https://jira.neos.io/
В Flow 3.x все работает нормально, но с управлением ресурсами произошли серьезные изменения.
Добавление одной строки в Web / .htaccess должно решить проблему, но я не могу сказать, что это лучшее решение.
# Perform rewriting of persistent resource files
RewriteRule ^(_Resources/Persistent/.{40})/.+(\..+) $1$2 [L]
# Add this line - consider security
RewriteRule ^(_Resources/Persistent/.{40})/.+ $1. [L]
И ответьте, почему это происходит — постоянные ресурсы по умолчанию хранятся в Data/Persistent/Resources/<hash>
и у вас есть символическая ссылка от Web/_Resources/Persistent/<hash>.extension
, Итак, стандартная символическая ссылка выглядит так:
0c73666545d393d3d2d6b5a2039dceab56fb3aa2.txt -> /www/FLOW/23/Data/Persistent/Resources/0c73666545d393d3d2d6b5a2039dceab56fb3aa2
Если файл не имеет расширения, в конце просто точка
a94a8fe5ccb19ba61c4c0873d391e987982fbbd3. -> /www/FLOW/23/Data/Persistent/Resources/a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
Таким образом, на самом деле ссылка, возвращаемая ResourceViewHelper (FileSystemPublishingTarget), является правильной, но первое правило перезаписи выше требует расширения. Добавляя второй, вы ловите файлы без расширения и просто добавляете. в конце, чтобы найти правильную символьную ссылку с хешем и точкой в конце.
Других решений пока нет …