symfony2 .htaccess веб-папка блокирует доступ к некоторой подпапке

У меня есть следующие подпапки в веб-папке.

  • / Темы / магазин / 1 / html
  • / Темы / магазин / 1 / актив
  • / Темы / магазин / 2 / html
  • / Темы / магазин / 2 / актив

Я хочу заблокировать доступ к любой папке html в папке тем и разрешить доступ только ко всем папкам ресурсов.

Как я могу добиться этого с помощью .htaccess или контроля доступа symfony2?

1

Решение

Вы можете сделать это с помощью .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]
1

Другие решения

Других решений пока нет …