symfony2 .htaccess web文件夹阻止访问某些子文件夹

时间:2015-09-18 15:45:34

标签: php .htaccess symfony assets

我在网络文件夹中有以下子文件夹。

  • /主题/商店/ 1 / HTML
  • /主题/商店/ 1 /资产
  • /主题/店铺/ 2 / HTML
  • /主题/店铺/ 2 /资产

我想阻止访问themes文件夹中的任何html文件夹,并且只允许访问所有资源文件夹。

如何使用.htaccess或symfony2访问控制实现此目的?

1 个答案:

答案 0 :(得分:1)

您可以使用.htaccess执行此操作,方法是在用户尝试访问它们时向用户提供HTTP 403 - Forbidden错误:

$filteredMenu = array();
$unique = array();
$index = 0;
$index2 = 0;
foreach ($menus as $key => $menu) {
  $pm = $menu['Menu']['name'];
$pm1 = $menu['sub_menus']['name'];
if (isset($unique[$pm])) {                
    if (!empty($menu['sub_menus']['name'])) {
        $temp = array('name' => $menu['sub_menus']['name'], 'action' => $menu['sub_menus']['action']);
        $filteredMenu[$index]['menu']['sub_menu'][] = $temp;
    }
     if(!empty($menu['sub_sub_menus']['name'])){
             $temp = array('name' => $menu['sub_sub_menus']['name'], 'action' => $menu['sub_menus']['action']);
        $filteredMenu[$index]['menu']['sub_menu']['sub_menu2'][] = $temp;
        }
} else {
    if ($key != 0)
        $index++;
    $unique[$pm] = 'set';

    $temp = array('name' => $pm, 'action' => $menu['Menu']['action']);
    $filteredMenu[$index]['menu'] = $temp;

    if (!empty($menu['sub_menus']['name'])) {
        $temp = array('name' => $menu['sub_menus']['name'], 'action' => $menu['sub_menus']['action']);
        $filteredMenu[$index]['menu']['sub_menu'][] = $temp;
    }
     if(!empty($menu['sub_sub_menus']['name'])){
             $temp = array('name' => $menu['sub_sub_menus']['name'], 'action' => $menu['sub_menus']['action']);
        $filteredMenu[$index]['menu']['sub_menu']['sub_menu2'][] = $temp;
        }

}
}

或者,如果您更喜欢404 - Not Found:

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

由于您提到您正在使用Symfony,您还应该注意将规则放在正确的位置,以便其他重写规则不会接管:

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

根据评论和a gist linked by @basit:您可以添加其他检查以确保对资源发出的任何请求:存在,实际上是资产文件,并且仅包含在资产文件夹中。

<IfModule mod_rewrite.c>
    RewriteEngine On

    #Put them first, otherwise they might get routed elsewhere
    RewriteRule ^/themes/shop/(.*)/html(.*) - [L,R=403]

    #...

</IfModule>