我有一个简单的文件服务器(centos 7 上的 apache 2.4),其结构如下: /index.html - 一个确保此处没有目录列表的页面 /upload - 用于上传的 php 脚本 /storage - 文件的基本目录 /storage/ upload - 由 php 上传的文件 /storage/public - 不受密码保护的文件
我无法使目录列表工作。例如在 /storage/public 我看到 /index.html 页面。/storage/public 中没有 index.html。如果我删除此页面,我会在 /page 中看到默认的 apache“testing 123”页面,并且目录列表在 /storage/public(以及所有其他具有 +Indexes 的地方)中有效。为什么 /index.html 显示在 /storage/public/
<IfModule mod_ssl.c>
<VirtualHost *:443>
DocumentRoot "/home/webroot/www"
ServerName subdomain.example.com
ErrorLog "/home/rootdir/log/subdomain.error.log"
CustomLog "/home/rootdir/log/subdomain.access.log" common
SuexecUserGroup user apache
#Set caching on image files for 11 months
<filesMatch "\.(ico|gif|jpg|png|js|css)$">
#ExpiresActive On
#ExpiresDefault "access plus 11 month"
Header append Cache-Control "public"
</filesMatch>
<Directory "/home/webroot/www" >
AllowOverride None
Options -ExecCGI -Indexes +Includes +SymLinksIfOwnerMatch +MultiViews
Require all granted
</Directory>
<Directory "/home/webroot/www/storage/upload" >
AllowOverride None
AuthType Basic
AuthName "Restricted Content"
AuthUserFile /home/rootdir/.htpasswd
Require valid-user
<FilesMatch "\.php$">
SetHandler "proxy:unix:/usr/local/php73/var/run/php-fpm.sock|fcgi://localhost/"
</FilesMatch>
</Directory>
<Directory "/home/webroot/www/storage/" >
AllowOverride None
Options +Indexes +SymLinksIfOwnerMatch +MultiViews
AuthType Basic
AuthName "Restricted Content"
AuthUserFile /home/rootdir/.htpasswd
Require valid-user
#Require all granted
RemoveType .php
Order allow,deny
Allow from all
</Directory>
<Directory "/home/webroot/www/storage/public" >
Options +Indexes +SymLinksIfOwnerMatch +MultiViews
AuthType None
Require all granted
Satisfy Any
</Directory>
<Directory "/home/webroot/www/.well-known" >
AuthType None
Require all granted
Satisfy Any
Allow from all
</Directory>
<Directory "/home/webroot/www/storage/upload" >
AuthType Basic
AuthName "Restricted Content"
AuthUserFile /home/rootdir/.htpasswd
Require valid-user
</Directory>
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/text text/html text/plain text/xml text/css text/javascript application/x-javascript application/javascript
</IfModule>
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/subdomain.example.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/subdomain.example.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/subdomain.example.com/chain.pem
</VirtualHost>
</IfModule>
更新:
# apachectl -M|grep autoindex
autoindex_module (shared)
另一个虚拟主机有以下问题:我使用的虚拟主机的根文件夹中有 index.html
Options -ExecCGI -Indexes
所以我有一个子目录 /test 并放了另一个 index.html,但是当我在浏览器中打开 /test/ 时,我看到 /index.html 而不是 /test/index.html
这个虚拟主机中根本没有 php。
列出的问题给人的印象是所涉及的文件夹中的权限存在问题。
有几种权限需要检查:
处理 httpd 的用户/组:
ps axo pid,user,group,comm
文件系统权限:
ls -l
和或ls -lR
,ls -ld
)SELinux 权限:
sestatus
验证状态和模式)ls -lZ
and orls -lRZ
ls -ldZ
)ps -axZ | grep httpd
)getsebool -a | grep httpd
)tail -f /var/log/audit/audit.log
)问题是我更改了全局设置:
至:
为了解决另一个问题- 我使用带有 ProxyPassMatch 指令的 php fpm 服务器,如下所示:
正如我在 apache.org 上阅读的那样。使用 ProxyPassMatch 和 index.php 时的问题是缺少 apache 不加载 index.html(另一个类似的问题)
将全局指令恢复为:
解决了这个问题,但是当缺少 index.php 时,当 vhost apache 中的 ProxyPassMatch 没有回退到 index.html 时,我仍然遇到问题。
现在我必须将赏金奖励给某人。如果我不能在两个答案之间拆分它,我会将它授予 little_dog,因为我认为他更接近我的问题。
检查您是否已启用自动索引模块,按:
apachectl -M
应该是:如果不是,您需要启用它,在 Centos 中参考:https ://unix.stackexchange.com/questions/258854/disable-and-enable-modules-in-apache-centos7
更新#1
对于目录列表工作,您的目录中不能有 index.html,请检查: https ://cwiki.apache.org/confluence/display/httpd/DirectoryListings