Apache 2.4 使用 FilesMatch 的子目录规则、默认值和覆盖

Apache 2.4 使用 FilesMatch 的子目录规则、默认值和覆盖

我无法理解基本的 Apache 配置。

我想为服务器上的所有文件和目录启用一组默认值,然后针对某些文件和/或目录启用/禁用或修改它们。

我想要的默认设置是拒绝访问服务器上的所有文件并允许访问 Web 根目录 (/var/www/html) 下的所有目录。

我想允许访问 Web 根目录和所有子目录(将来可能会动态创建)中的某些文件(与正则表达式匹配),并仅允许访问来自给定 IP(或子网)的某些文件和/或目录。

所有错误页面(针对不存在或不允许的文件/目录)都映射到 localized-error-pages.conf 中的一个简单字符串。

我还想禁用所有目录的目录列表,但如果存在则显示 index.html 文件。例如,我想要以下内容(如果文件或目录不存在或不允许,则全部显示错误页面):

example.com                # shows index.html in root
example.com/test.txt       # shows test.txt in root
example.com/test.php       # runs if IP matches
example.com/dir1           # shows index.html in dir1
example.com/dir1/test.txt  # shows test.txt in dir1
example.com/dir2           # shows index.html for dir2 if IP matches

如果根目录是 /var/www/html,我想执行以下操作(在 ubuntu 上的 apache.conf 中),注意这不起作用

...
<FilesMatch "^.*$>
    Require all denied
</FilesMtch>
<FilesMatch "^.*\.(html|txt|pdf)$">
    Require all granted
</FilesMatch>
<FilesMatch "^.*\.php$">
    Require ip 192.168.0.10
</FilesMatch>

<Directory />
    AllowOverride None
    Require all denied
</Directory>
<Directory /var/www/html>
    AllowOverride None
    Options Indexes FollowSymLinks
    <LimitExcept GET POST OPTIONS>
        Require all granted
    </LimitExcept>
</Directory>
<Directory /var/www/htm/dir2>
    AllowOverride None
    Require ip 192.168.0.10
<Directory>

如果我输入根目录或任何子目录的地址(不指定 index.html),我想显示该目录的 index.html(如果存在)或默认错误页面(映射到 localized-error-pages.conf 中的简单字符串)。例如:

问题是,即使经过大量的搜索和阅读,我仍然不明白 apache 配置是如何工作的,特别是指定规则的顺序以及它们如何级联到其他目录;但我认为一个可行的例子可以帮助我理解。

有人可以帮忙吗?

相关内容