Я запускаю сервер Apache 2.4 с использованием docker-compose
.
У меня есть «главный» виртуальный хост, который включает в себя перезапись путей, начинающихся с / test /
, в субдомен test
:
<VirtualHost *:80>
ServerName example.com
RewriteEngine on
RewriteRule "^/test/(.*)$" "http://test.example.com/$1" [P]
</VirtualHost>
Поддомен test
выполняет не существует и не может быть создан (по коммерческим причинам, не имеющим отношения к проблеме). Способ, которым я выполняю разрешение test.example.com
, заключается в том, чтобы включить записи хостов в docker-compose.yml
:
version: "3.7"
services:
test:
image: httpd:2.4
ports:
- 80:80
extra_hosts:
- "test.example.com:127.0.0.1"
Это работает, однако в тесте vhost для .example.com
У меня есть другое правило перезаписи:
<VirtualHost *:80>
ServerName test.example.com
RewriteEngine on
RewriteCond %{REQUEST_URI} ^/login
RewriteCond %{HTTP:COOKIE} ^.*cookie=([^;]+)
RewriteRule /login /dashboard [R=302]
</VirtualHost>
Это правило правильно перезаписывает http://test.example.com/login
на http://test.example.com / dashboard
при успешном входе в систему, но затем в браузере пользователя происходит перенаправление, и http://test.example.com
не может быть разрешен ( ERR_NAME_NOT_RESOLVED
).
Как я могу выполнить эту перезапись на виртуальном хосте test.example.com
, чтобы он правильно перенаправлял пользователя на страницу / dashboard
?
Вы можете добавить перенаправление в конфиг для example.com:
<VirtualHost *:80>
ServerName example.com
RewriteEngine on
RewriteCond %{HTTP:COOKIE} ^.*cookie=([^;]+)
RewriteRule "^/test/login/?$" "/test/dashboard" [R=302]
RewriteRule "^/test/(.*)" "http://test.example.com/$1" [P]
</VirtualHost>