Apache httpd перенаправляет с локального хоста не работает в Docker - PullRequest
0 голосов
/ 27 марта 2019

Чтобы опубликовать некоторые файлы онтологий, я хочу добавить перенаправления на w3id.org , который является просто HTTP-сервером Apache, который можно настроить с помощью .htaccess файлов в общедоступном репозитории GitHub .

Поскольку я совсем не знаком с сервером Apache и перенаправлениями HTTP, я попытался запустить w3id в локальном контейнере Docker.Поэтому я следовал инструкции на httpd изображении Docker и создал 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, которая предоставляет простой HTMLцелевая страница проекта w3id.

Однако, если я попытаюсь получить доступ, например, к 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 Ответ

1 голос
/ 27 марта 2019

Возможно, вам потребуется включить mod_rewrite и включить переопределение с помощью .htaccess.

. См. Рабочий докер-файл ниже:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...