簡體   English   中英

Apache httpd從本地主機重定向無法在Docker中運行

[英]Apache httpd redirects from localhost not working in Docker

要發布一些本體文件,我想將重定向添加到w3id.org ,它只是一個Apache HTTP Server,可以通過公共GitHub存儲庫中的 .htaccess文件進行配置。

由於我根本不熟悉Apache服務器和HTTP重定向,因此我嘗試使w3id在本地Docker容器中運行。 因此,我按照httpd Docker映像上的說明進行操作,並創建了一個包含以下內容的Dockerfile

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

當然,我用本地w3id存儲庫文件的路徑替換了./public-html/

我使用以下命令來構建和運行容器:

$ 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內所有文件的概述,這似乎是所有請求的默認行為。

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

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文件中本地設置和測試外部重定向?

您可能需要啟用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM