Apache-2.4

使用 hosts 文件將子域映射到 Apache 伺服器上的 localhost 時使用重寫規則重定向使用者

  • March 17, 2021

我正在使用 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是將 hosts 條目包含在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.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>

引用自:https://serverfault.com/questions/1057322