Я хочу запретить прямой доступ к некоторым конфиденциальным файлам в моем корневом приложении (например, log, sh, ini ... и т. Д.). и по этой причине я использовал следующую директиву в моем основном .htaccess:
<FilesMatch "\.(htaccess|htpasswd|ini|log|sh|inc|bak|md|txt|lock|phar|bat)$|action.bat|composer.json|VERSION.*">
Require all denied
</FilesMatch>
странно то, что он отлично работает для всех файлов, перечисленных в FileMatch, за исключением файлов с расширением (.bat), которые я еще не понял, почему они все еще загружаются с использованием прямого доступа по URL. Конфигурация:
Версия компонентов XAMPP:
Обновить:
на самом деле я обнаружил, что сопоставление шаблонов работает со всеми файлами ".bat", кроме файлов с именем "action"! если я поменяю имя на другое (скажем, «действие1»), оно будет работать нормально.
Вы можете добавить следующее в свой файл vhost
<Files *.bat>
Order allow,deny
Deny from all
</Files>
Вы можете добавить свой тип расширения в соответствии с вашими требованиями.
Регулярное выражение, которое у вас есть, должно работать. Вы также сможете удалить action.bat|
и он должен работать так же. Если ваш файл не заканчивается на .bat
, это может вызвать проблемы.
Упрощенное объяснение того, что он делает:
\.(htaccess|htpasswd|ini|log|sh|inc|bak|md|txt|lock|phar|bat)$
||| |
||^Any string within brackets (separated with | as "or") |
|^Any character or . when escaped End of filename marker ^
^Escape character
Попробуйте перезапустить сервер, убедитесь, что вы работаете в правильном каталоге, и убедитесь, что ничто другое не противоречит правилам, которые вы устанавливаете в этом .htaccess.