Apache-2.2
使用 Apache httpd 重定向上下文路徑?
我想代理
http://localhost:1006/
外部http://example.com/public/
世界。這是我的配置:RewriteEngine On # Append a slash if necessary RewriteRule ^/public$ public/ [R,L] # Request headers: Replace http://localhost:1006/ with http://example.com/public/ ProxyPass /public/ http://localhost:1006/ # Response headers: Replace http://example.com/ with http://example.com/public/ ProxyPassReverse /public/ http://example.com/ ProxyPassReverseCookiePath / /public/ <Location /public> Require all granted </Location>
這適用於重寫標頭,但伺服器仍然認為它的上下文路徑
/
不是,/public/
所以當它構造 URL 以嵌入 JSON 時,它們是不正確的。Httpd 只重寫標頭,而不是 JSON,因此它對此無能為力。我不想讓 httpd 重寫 JSON(我讀的過程是不可靠的)。我注意到
Host
httpd 發送到伺服器的標頭包含外部主機名,這使伺服器能夠更正 URL 的那部分。我可以設置一些其他標頭來指示伺服器使用不同的上下文路徑嗎?意思是,我可以在 httpd 上做些什麼來改變伺服器的上下文路徑而不直接改變伺服器的配置/程式碼?
簡短的回答:不,不是真的。通常,您的後端應用程序需要有一個選項來配置其自己的根 URL,以便它可以生成適當的連結。如果您的後端應用程序託管在 Tomcat 之類的東西中,那麼只需安裝它,使其在相同的相對路徑中可用(例如,您正在代理 from
example.com/public/
tolocalhost:1006/public/
)。
您可以嘗試反向重寫輸出,但是讓後端應用程序認為它存在於 /public 中要容易得多,因為如果您進行重寫,您將在可預見的未來玩內容重寫的鼴鼠小路。