我在Docker容器中的Apache2的Web主页中使用了以下.htaccess文件:
# allows HTML files to be interpretted as PHP files
AddType application/x-httpd-php .html
# allows redirect to *.html files without using the extension
# e.g., http://example.com/foo will show http://example.com/foo.html
<IfModule mod_rewrite.c>
Options All
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.html -f
#RewriteRule !.*\.html$ %{REQUEST_FILENAME}.html [L]
RewriteRule !.*\.html$ %{REQUEST_URI}.html [L]
# causes redirect from HTTP to HTTPS
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</IfModule>
Options -Indexes
# environament variables
SetEnv DBL "mysql:dbname=roars;host=foo;port=3306"
SetEnv DB_USER "bar"
SetEnv DB_PASS "glorp"
Options -Indexes
指令并没有阻止我们查看目录。所有其他指令都能正常工作,当我在Docker容器之外使用这个.htaccess文件时,它可以通过禁止查看目录来正常工作。
我做错了什么,或者这对Docker容器有用吗?
答案 0 :(得分:2)
我在Docker容器中的Apache2的默认配置文件中发现了这个问题:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName dev.f0o.com
DocumentRoot /home/foo/src/www-server/
#ErrorLog ${APACHE_LOG_DIR}/error.log
#CustomLog ${APACHE_LOG_DIR}/access.log combined
ErrorLog /var/log/apache2/error.log
CustomLog /var/log/apache2/access.log combined
</VirtualHost>
<Directory /home/foo/src/www-server/>
# allow .htaccess overrides to work
AllowOverride All
DirectoryIndex login.html index.html index.php
</Directory>
# this matches a link to any device directory to the physical webui directory
#AliasMatch ^/projects/([-\w]*)/css/(.*)$ /home/foo/src/www-server/static/css/$2
#AliasMatch ^/projects/([-\w]*)/fonts/(.*)$ /home/foo/src/www-server/static/fonts/$2
#AliasMatch ^/projects/([-\w]*)/images/(.*)$ /home/foo/src/www-server/static/images/$2
#AliasMatch ^/projects/([-\w]*)/lib/(.*)$ /home/foo/src/www-server/static/lib/$2
#AliasMatch ^/projects/([-\w]*)/scripts/(.*)$ /home/foo/src/www-server/static/scripts/$2
AliasMatch ^/projects/([-\w]*)/(.*)$ /home/foo/src/www-server/client/$2
<Directory /home/foo/src/www-server/client>
DirectoryIndex home.html
Options All
AllowOverride All
Require all granted
</Directory>
解决方案1 - 问题首先在/home/foo/src/www-server/client
中注意到,它在默认配置文件的末尾有一组特定的覆盖。允许使用目录列表,因为Options
设置为All
。将其更改为Options -Indexes
可解决此问题。
解决方案2 - 作为一项实验,我注释了以Options
开头的行,结果是我想要的,可能是因为.htaccess文件被允许执行其工作而没有冲突从默认配置文件。
因为我不是,通常是配置网络服务器的人,我相信鉴于我们现在已知的一套已知的问题,可能有更好的方法来解决问题。那些在Apache Web服务器配置方面拥有更多专业知识的人可能会有更优雅的解决方案。