私はシンプルなファイルサーバー(centos 7上のApache 2.4)を使用しています。/index.html-ここにディレクトリリストがないことを確認するページ/ upload-アップロード用のphpスクリプト/ storage-ファイルのベースディレクトリ/ storage/upload-php/storage/publicによってアップロードされたファイル-パスワードで保護されていないファイル
ディレクトリ一覧を機能させることができません。たとえば、/ storage/publicには/index.htmlページがあります。/storage/publicにindex.htmlはありません。このページを削除すると、デフォルトの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 /を開くと、/ test/index.htmlではなく/index.htmlが表示されます
このvhostにはPHPはありません。
問題は私がからグローバル設定を変更したことでした:
DirectoryIndex index.php index.html
to:
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
問題を修正しましたが、vhostにProxyPassMatchがあり、index.phpがない場合にApacheがindex.htmlにフォールバックしない場合にも問題が発生します。
今私は誰かに賞金を授与しなければなりません。 2つの答えに分けられない場合は、少し問題に近いと思うのでlittle_dogに与えます。
リストされた問題は、関係するフォルダーのアクセス許可に問題があるという印象を与えます。
チェックする権限にはいくつかの種類があります。
httpdのユーザー/グループを処理する:
ps axo pid,user,group,comm
を使用ファイルシステムの権限:
ls -l
およびls -lR
、ls -ld
を使用)SELinux権限:
sestatus
を使用してステータスとモードを確認)ls -lZ
およびls -lRZ
ls -ldZ
を使用)ps -axZ | grep httpd
を使用)getsebool -a | grep httpd
を使用)tail -f /var/log/audit/audit.log
を使用)有効化されたautoindexモジュールがあるかどうかを確認するには、次のようにします。apachectl -M
は、
Loaded Modules:
...
autoindex_module (shared)
...
そうでない場合は、有効にする必要があります。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
DirectoryIndexディレクティブのファイルをディレクトリに配置できない場合、mod_autoindexはディレクトリの内容のリストを生成できます。