Apache httpd从本地主机重定向无法在Docker中运行

时间:2019-03-27 13:39:28

标签: apache docker redirect

要发布一些本体文件,我想添加到w3id.org的重定向,该重定向只是一个Apache HTTP Server,可以通过a public GitHub repository中的.htaccess个文件进行配置。

由于我完全不熟悉Apache服务器和HTTP重定向,因此我试图让w3id在本地Docker容器中运行。因此,我按照httpd Docker image上的说明进行操作,并创建了一个包含以下内容的Dockerfile

FROM httpd:2.4
COPY ./public-html/ /usr/local/apache2/htdocs/

当然,我用本地./public-html/本地存储库文件的路径替换了w3id

我使用以下命令来构建和运行容器:

$ docker build -t w3id.org .
$ docker run -dit --name w3id.org -p 8080:80 w3id.org

然后,我可以成功访问位于localhost:8080的端点,该端点提供了w3id项目的简单HTML登陆页面。

但是,如果我尝试访问localhost:8080/security,与访问w3id.org/security时相比,我将不会以任何方式被重定向,这会像预期的那样指向web-payments.org/vocabs/security 。相反,该请求提供了有关特定目录security中所有文件的概述,这似乎是所有请求的默认行为。

.htaccess目录中的示例security文件包含:

Header set Access-Control-Allow-Origin *
Header set Access-Control-Allow-Headers DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified$
Options +FollowSymLinks
RewriteEngine on
RewriteRule ^$ https://web-payments.org/vocabs/security [R=302,L]
RewriteRule ^v1$ https://web-payments.org/contexts/security-v1.jsonld [R=302,L]
RewriteRule ^v2$ https://web-payments.org/contexts/security-v2.jsonld [R=302,L]

这是由我的Dockerfile还是运行容器的方式引起的? 我需要在Apache中启用重定向吗? 还是可能是由于我的本地设置中缺少HTTPS造成的?

如何在.htaccess文件中本地设置和测试外部重定向?

1 个答案:

答案 0 :(得分:1)

您可能需要启用mod_rewrite并启用.htaccess的覆盖。

有关工作参考,请参见以下Dockerfile:

FROM httpd:alpine

RUN sed -i '/LoadModule rewrite_module/s/^#//g' /usr/local/apache2/conf/httpd.conf && \
    sed -i 's#AllowOverride [Nn]one#AllowOverride All#' /usr/local/apache2/conf/httpd.conf

WORKDIR /usr/local/apache2/htdocs/

COPY ./public .

然后,可以通过.htaccess重定向,如下所示:

RewriteEngine On
Redirect /whatever http://example.com

我建议您首先在docroot中尝试此操作,以确保重定向工作正常,然后查看是否要/需要将.htaccess更深地移至安全目录,并根据需要进行进一步调整

最后,由于我不确定您是粘贴了正在使用的确切docker命令还是只是部分命令,因此建议在开发过程中将公共目录挂载到容器,这样一来,您无需为每次更改都重新构建调试。

$ docker build -t temp .
$ docker run -i -p 3000:80 -v $PWD/public:/usr/local/apache2/htdocs/ temp