2015-09-18 4 views
1

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

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

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

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

ответ

1

Вы можете сделать это с помощью .htaccess, предоставляя пользователям HTTP 403 - Запретный ошибку, если они пытаются получить доступ к ним:

RewriteRule ^/themes/shop/(.*)/html(.*) - [L,R=403] 

Или, если вы предпочитаете 404 - Not Found:

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> 

В соответствии с комментариями и a gist linked by @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] 
+0

Мне удалось сделать это с помощью RequestCond с вашим фрагментом с небольшими дополнительными защитами. Если вы добавите следующий ответ, я бы принял его. https://gist.github.com/iBasit/e55b632ec62fcb844fd7 – Basit

+0

@Basit, рад слышать фрагмент кода помог - я обновил свой ответ – HPierce