Apache-2.2

使用 Apache httpd 重定向上下文路徑?

  • December 3, 2014

我想代理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(我讀的過程是不可靠的)。我注意到Hosthttpd 發送到伺服器的標頭包含外部主機名,這使伺服器能夠更正 URL 的那部分。我可以設置一些其他標頭來指示伺服器使用不同的上下文路徑嗎?

意思是,我可以在 httpd 上做些什麼來改變伺服器的上下文路徑而不直接改變伺服器的配置/程式碼?

簡短的回答:不,不是真的。通常,您的後端應用程序需要有一個選項來配置其自己的根 URL,以便它可以生成適當的連結。如果您的後端應用程序託管在 Tomcat 之類的東西中,那麼只需安裝它,使其在相同的相對路徑中可用(例如,您正在代理 from example.com/public/to localhost:1006/public/)。

您可以嘗試反向重寫輸出,但是讓後端應用程序認為它存在於 /public 中要容易得多,因為如果您進行重寫,您將在可預見的未來玩內容重寫的鼴鼠小路。

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