Apache-2.4
使用 hosts 文件將子域映射到 Apache 伺服器上的 localhost 時使用重寫規則重定向使用者
我正在使用 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/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>