Apache 目錄索引在子目錄中不起作用
我有一個簡單的文件伺服器(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。
問題是我更改了全域設置:
DirectoryIndex index.php index.html
至:
DirectoryIndex /index.php index.php /index.html index.html
為了解決另一個問題- 我使用帶有 ProxyPassMatch 指令的 php fpm 伺服器,如下所示:
ProxyPassMatch ^/(.*.php(/.*)?)$ unix:/path/to/php-fpm.sock|fcgi://localhost/home/userdir/www/$1
正如我在 apache.org 上閱讀的那樣。使用 ProxyPassMatch 和 index.php 時的問題是缺少 apache 不載入 index.html(另一個類似的問題)
將全域指令恢復為:
DirectoryIndex index.php index.html
解決了這個問題,但是當缺少 index.php 時,當 vhost apache 中的 ProxyPassMatch 沒有回退到 index.html 時,我仍然遇到問題。
現在我必須將賞金獎勵給某人。如果我不能在兩個答案之間拆分它,我會將它授予 little_dog,因為我認為他更接近我的問題。
列出的問題給人的印像是所涉及的文件夾中的權限存在問題。
有幾種權限需要檢查:
處理 httpd 的使用者/組:
- 採用
ps axo pid,user,group,comm
文件系統權限:
- 使用者、組、讀、寫、執行標誌(使用
ls -l
和或ls -lR
,ls -ld
)SELinux 權限:
- 如果它處於活動狀態,這可能在 CentOS 上(用於
sestatus
驗證狀態和模式)- 文件權限上下文(使用
ls -lZ
and orls -lRZ
ls -ldZ
)- httpd SELinux 上下文(使用
ps -axZ | grep httpd
)- SELinux 布爾值(使用
getsebool -a | grep httpd
)- 在嘗試生成目錄列表時檢查審計日誌(使用
tail -f /var/log/audit/audit.log
)