我将尽我所能解释这种情况,因为这似乎有些复杂。

我正在为一个大型组织构建此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>

如果用户点击“链接”,将导致他出现404错误,导致实际网址应为/fakedirectory/anotherdoc.html

正如我所看到的,这应该通过与虚拟机进行通信的所述反向代理以某种方式解决。但是我客户组织的一位IT人士建议,如果我的symfony应用程序只正确发送网址,那会更容易。

因此,在我(可能是错误地)要求IT部门在其代理中执行某项操作之前,有什么方法可以在我的虚拟机中解决此问题?我已经阅读了有关request contexts的symfonys文档,特别是这样:
# 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中进行一些奇怪的配置,但是没有运气。

因此,总而言之,我绝对是一无所知,所以任何想法都将不胜感激。提前致谢。

最佳答案

我自己也遇到了类似的问题。
在这种情况下,URL重写将无济于事,因为symfony从基于app.php脚本位置的$_SERVER变量获取基本路径。 REQUEST_URI将为/fakedirectory/,但SCRIPT_NAME将为/app.php,因此基本路径将变为/,并且fakedirectory被视为symfony路由器路径。

解决方案:

制作一个假目录符号链接(symbolic link)。在Web目录中,运行ln -s . fakedirectory

现在使用REQUEST_URI作为/fakedirectory/,您将拥有等于SCRITP_NAME/fakedirectory/app.php值,并且所有 Assets 或路由器路径都将具有正确的/fakedirectory/基本路径。

10-08 19:22