簡體   English   中英

在反向代理后面運行的symfony應用程序的URL

[英]Urls of a symfony app running behind a reverse proxy

我會盡力解釋這個場景,因為它看起來有點復雜。

我正在為一個大型組織構建這個Web應用程序,該組織在其服務器中運行了許多其他Web應用程序。 當我最終完成開發階段時,他們讓我向他們發送一個虛擬機,其中包含所有已配置並准備運行的內容(Web應用程序,apache,數據庫等),以及某種未知的魔法對我(他們談到反向代理),他們會讓它可以訪問世界。

所以我給他們發了機器,他們把它放在http://www.fakedomain.com/fakedirectory上 (注意/ fakedirectory部分)

現在,這確實將外部請求重定向到在我的虛擬機中運行的Web服務器。 問題是我的symfony應用程序生成了相對於虛擬機中的Web服務器的所有URL,它在根(“/”)上運行。 但是,用戶訪問的實際URL是/ fakedirectory。 因此,例如,當您訪問/fakedirectory/doc.html時,這就是您所獲得的:

<html>
...
<body>
    ...
    <a href="/anotherdoc.html">A link</a>
</body>
</html>

如果用戶點擊“A鏈接”,則會導致404錯誤,導致實際網址應為/fakedirectory/anotherdoc.html

在我看來,這應該以某種方式從正在與虛擬機進行通信的所述反向代理中解決。 但是我客戶組織的IT人員建議,如果我的symfony應用程序只是正確地調整網址,那將會更容易。

所以,在我(可能是錯誤地)要求IT在他們的代理中做某事之前,有沒有辦法可以在我的虛擬機中解決這個問題? 我已經閱讀了有關請求上下文的 symfonys doc,特別是:

# app/config/parameters.yml
parameters:
    router.request_context.host: www.fakedomain.com
    router.request_context.scheme: http
    router.request_context.base_url: fakedirectory

但這似乎並不適用於整個symfony的url系統。 我也在apache的mod_proxy和mod_rewrite中嘗試了一些奇怪的配置而沒有運氣。

所以,簡而言之,我絕對無能為力,所以任何想法都會受到贊賞。 提前致謝。

我想你可以用RewriteBase規則來解決這個問題嗎?

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /fakedirectory/web
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^(.*)$ app.php [QSA,L] 
</IfModule>

我自己遇到了類似的問題。 在這種情況下,url Rewrites將無濟於事,因為symfony根據app.php腳本位置從$_SERVER變量獲取基本路徑。 REQUEST_URI將是/fakedirectory/但是SCRIPT_NAME將是/app.php因此基本路徑變為/並且fakedirectory被視為symfony路由器路徑。

解:

制作一個偽記錄符號鏈接。 在web目錄里面運行ln -s . fakedirectory ln -s . fakedirectory

現在使用REQUEST_URI作為/fakedirectory/您將使SCRITP_NAME值等於/fakedirectory/app.php並且所有資產或路由器路徑將具有正確/fakedirectory/基本路徑。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM