#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