我将尽我所能解释这种情况,因为这似乎有些复杂。
我正在为一个大型组织构建此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/
基本路径。