在反向代理后面运行的symfony应用程序的URL

时间:2015-05-15 12:05:18

标签: php apache symfony mod-rewrite proxy

我会尽力解释这个场景,因为它看起来有点复杂。

我正在为一个大型组织构建此Web应用程序,该组织在其服务器中运行了大量其他Web应用程序。当我最终完成开发阶段时,他们让我向他们发送一个虚拟机,其中包含所有已配置并准备运行的内容(Web应用程序,apache,数据库等),以及某种未知的魔法对我(他们谈到反向代理),他们会让它可以访问世界。

所以我发给他们机器,他们把它放在http://www.fakedomain.com/fakedirectory上(注意/伪装目录部分)

现在,这确实将外部请求重定向到在我的虚拟机中运行的Web服务器。问题是我的symfony应用程序生成了相对于虚拟机中的Web服务器的所有URL,它在根目录上运行(" /")。但是,用户访问的实际URL是/ fakedirectory。因此,例如,当您访问/fakedirectory/doc.html时,这就是您所获得的:

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

如果用户点击&#34;链接&#34;它会导致他出现404错误,导致实际网址应为/fakedirectory/anotherdoc.html

正如我所看到的,这应该以某种方式从正在与虚拟机进行通信的所述反向代理中解决。但是来自我的客户组织的IT人员建议,如果我的symfony应用程序只是正确地调整网址,那将会更容易。

所以,在我(可能是错误地)要求IT在他们的代理中做某事之前,有没有办法可以在我的虚拟机中解决这个问题?我已阅读有关request contexts的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的网址系统。我也在apache的mod_proxy和mod_rewrite中尝试了一些奇怪的配置而没有运气。

所以,简而言之,我绝对无能为力,所以任何想法都会受到赞赏。提前谢谢。

1 个答案:

答案 0 :(得分:1)

我认为您可以使用RewriteBase规则解决此问题吗?

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