【问题标题】:Urls of a symfony app running behind a reverse proxy在反向代理后面运行的 symfony 应用程序的 URL
【发布时间】:2018-02-26 00:27:07
【问题描述】:

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

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

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

现在,这确实将外部请求重定向到在我的虚拟机中运行的网络服务器。问题是我的 symfony 应用程序正在生成与虚拟机中的 Web 服务器相关的所有 url,该虚拟机在根 ("/") 上运行。但是,用户访问的实际 url 是 /fakedirectory。因此,例如,这是您访问 /fakedirectory/doc.html 时得到的:

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

如果用户点击“A 链接”会导致 404 错误,因为实际的 url 应该是 /fakedirectory/anotherdoc.html

在我看来,这应该通过与虚拟机进行通信的上述反向代理以某种方式解决。但是我客户组织的一位 IT 人员建议,如果我的 symfony 应用程序只是正确地吐出 url,那会更容易。

所以,在我(可能是错误地)要求 IT 在他们的代理中做某事之前,有没有办法可以在我的虚拟机中解决这个问题?我在 symfonys 文档上阅读过关于 request contexts 的内容,特别是:

# 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 中尝试了一些奇怪的配置,但没有成功。

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

【问题讨论】:

    标签: php apache symfony mod-rewrite proxy


    【解决方案1】:

    我自己也遇到过类似的问题。 在这种情况下,url Rewrites 将无济于事,因为 symfony 根据 app.php 脚本位置从 $_SERVER 变量获取基本路径。 REQUEST_URI 将是 /fakedirectory/SCRIPT_NAME 将是 /app.php 所以基本路径变为 / 并且 fakedirectory 被视为 symfony 路由器路径。

    解决方案:

    制作一个 fakedirectory 符号链接。在 web 目录中运行 ln -s . fakedirectory

    现在将REQUEST_URI 设置为/fakedirectory/,您的SCRITP_NAME 值将等于/fakedirectory/app.php,并且所有资产或路由器路径都将具有正确的/fakedirectory/ 基本路径。

    【讨论】:

    • 这感觉很对,也很简单。我不能再测试这个了,因为我已经与这个项目断开了很长时间。老实说,我不记得我是如何解决这个问题的,但我觉得我的解决方案不如你建议的那么好和直接。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-13
      相关资源
      最近更新 更多