Apache Conf - FilesMatch仅允许在当前文件夹中,而不允许在子文件夹中

时间:2016-04-01 07:23:38

标签: apache .htaccess httpd.conf

是否可以通过< files>访问特定文件?或< filesmatch>以便此规则不适用于子文件夹中具有相同名称的文件?

当前设置:

<FilesMatch "\.php$">
    Deny from all
</FilesMatch>

<Directory /var/www/>
    <Files index.php>
        Allow from all
    </Files>
</Direcotry>

<Directory /var/www/admin/>
    <Files index.php>
        Allow from all
    </Files>
</Direcotry>

我们假设以下内容:

  1. 我们在web-root中有一个index.php,在子文件夹admin中有一个,在各种其他子文件夹中,还有一些index.php文件。
  2. 没有* .php应该是可访问的,如果没有明确允许 - 在这种情况下只有/index.php和/admin/index.php
  3. 会发生什么:

    当允许访问webroots index.php时,所有子文件夹中的所有index.php文件都可以访问。

    尝试了什么:

    使用DirectoryMatch禁止访问子文件夹中的index.php。

    <FilesMatch ".+\.php$">
        Deny from all
    </FilesMatch>
    
    <Directory /var/www/>
        <Files index.php>
            Allow from all
        </Files>
    </Direcotry>
    
    <DirectoryMatch "/var/www/(.+)/">
        <Files index.php>
            Deny from all
        </Files>
    </DirectoryMatch>
    
    <Directory /var/www/admin/>
        <Files index.php>
            Allow from all
        </Files>
    </Direcotry>
    

    现在,不允许访问所有子文件夹中的所有index.php文件 - 但也不允许访问/ admin /中的index.php。

    还尝试使用absolut pathes文件

    <FilesMatch ".+\.php$">
        Deny from all
    </FilesMatch>
    <Files /var/www/index.php>
        Allow from all
    </Files>
    <Files /var/www/admin/index.php>
        Allow from all
    </Files>
    

    这也行不通。 没有index.php文件可访问 - 即使是webroot和admin-folder中的文件也无法访问。

    我认为有更好的方法可以解决这样的问题吗?

    亲切的问候,

    多米尼克

1 个答案:

答案 0 :(得分:0)

感谢arkascha,

DirectoryMatch方法是错误的想法。

对此的解决方案很简单 - 正如arkascha所推荐的那样:

<FilesMatch "\.php$">
    Deny from all
</FilesMatch>

<Directory /var/www/>
    <Files index.php">
        Allow from all
    </Files>
</Direcotry>

<Directory /var/www/*/*">
    <Files index.php>
        Deny from all
    </Files>
</Directory>

<Directory /var/www/admin/>
    <Files index.php>
        Allow from all
    </Files>
</Direcotry>

非常感谢。