选项 - 索引在Docker容器

时间:2016-04-27 19:26:16

标签: apache .htaccess docker

我在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容器有用吗?

1 个答案:

答案 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服务器配置方面拥有更多专业知识的人可能会有更优雅的解决方案。