我无法理解基本的 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 配置是如何工作的,特别是指定规则的顺序以及它们如何级联到其他目录;但我认为一个可行的例子可以帮助我理解。
有人可以帮忙吗?