У меня есть следующие подпапки в веб-папке.
Я хочу заблокировать доступ к любой папке html в папке тем и разрешить доступ только ко всем папкам ресурсов.
Как я могу добиться этого с помощью .htaccess или контроля доступа symfony2?
Вы можете сделать это с помощью .htaccess, предоставив пользователям ошибку HTTP 403 — Forbidden, если они пытаются получить к ним доступ:
RewriteRule ^/themes/shop/(.*)/html(.*) - [L,R=403]
Или, если вы предпочитаете 404 — не найдено:
RewriteRule ^/themes/shop/(.*)/html(.*) - [L,R=404]
Поскольку вы упомянули, что используете Symfony, вам также следует позаботиться о том, чтобы разместить правило в нужном месте, чтобы другие правила перезаписи не вступили во владение:
<IfModule mod_rewrite.c>
RewriteEngine On
#Put them first, otherwise they might get routed elsewhere
RewriteRule ^/themes/shop/(.*)/html(.*) - [L,R=403]
#...
</IfModule>
Согласно комментариям и суть связана @basit: вы можете добавить дополнительные проверки, чтобы убедиться, что любые запросы к ресурсам: существуют, на самом деле являются файлом ресурсов и содержатся только в папке ресурсов.
# contents of the gist linked above - in case the link ever breaks
# If the requested filename exists, simply serve it.
# We only want to let Apache serve files and not directories.
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_URI} !^/themes/stores/(.*)
RewriteCond %{REQUEST_URI} !^/themes/shop/(.*)
RewriteRule .? - [L]
# allow stores asset folder only
RewriteCond %{REQUEST_FILENAME} \.(gif|jpe?g|png|js|css|svg|svgz|eot|otf|woff|woff2|ttf|swf|php|ico|txt|pdf|xml)$
RewriteCond %{REQUEST_URI} ^/themes/stores/(.*)/asset/.*
RewriteRule .? - [L]
# allow shop asset folder only
RewriteCond %{REQUEST_FILENAME} \.(gif|jpe?g|png|js|css|svg|svgz|eot|otf|woff|woff2|ttf|swf|php|ico|txt|pdf|xml)$
RewriteCond %{REQUEST_URI} ^/themes/shop/(.*)/asset/.*
RewriteRule .? - [L]
Других решений пока нет …