使用 hosts 文件将子域映射到 Apache 服务器上的本地主机时,使用重写规则重定向用户

使用 hosts 文件将子域映射到 Apache 服务器上的本地主机时,使用重写规则重定向用户

我正在使用 运行 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"

这是可行的,但是在虚拟主机中test.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/loginhttp://test.example.com/dashboard,但随后重定向发生在用户的浏览器中,http://test.example.com无法解析(ERR_NAME_NOT_RESOLVED)。

我如何在test.example.comvhost 中执行此重写以便它正确地将用户重定向到该/dashboard页面?

答案1

您可以将重定向添加到 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>

相关内容