Перенаправление Apache httpd с локального хоста, не работающего в Docker

#apache #docker #redirect

#apache #docker #перенаправление

Вопрос:

Для публикации некоторых файлов онтологии я хочу добавить перенаправления на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. В вопросе отсутствует некоторая информация — как настроены перенаправления? Это перенаправление в .htaccess? Можете ли вы вставить соответствующий раздел из вашего htaccess? В любом случае, я не верю, что это связано с docker, или способом, которым вы его запускаете, или HTTPs (если только htaccess специально не выполняет перенаправление, связанное с https).

2. Я еще не создавал .htaccess файл, потому что хотел следить за файлами других проектов в репозитории. Однако ни один из них не работает внутри моей локальной тестовой установки (контейнера Docker). Тем не менее, я добавил содержимое .htaccess файла внутри каталога примера security к вопросу.

Ответ №1:

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

Смотрите приведенный ниже файл Dockerfile для рабочей ссылки:

 FROM httpd:alpine

RUN sed -i '/LoadModule rewrite_module/s/^#//g' /usr/local/apache2/conf/httpd.conf amp;amp; 
    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