[英]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.