要发布一些本体文件,我想添加到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
文件中本地设置和测试外部重定向?
答案 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