Kil*_*elo 5 php apache mod-rewrite proxy symfony
我会尽量解释这个场景,因为它看起来有点复杂。
我正在为一个大型组织构建这个网络应用程序,该组织在其服务器上运行着大量其他网络应用程序。当我最终完成开发阶段时,他们要求我向他们发送一个虚拟机,其中包含所有配置并准备运行的东西(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>
Run Code Online (Sandbox Code Playgroud)
如果用户点击“A 链接”,则会导致他出现 404 错误,导致实际 url 应该是 /fakedirectory/anotherdoc.html
在我看来,这应该以某种方式从与虚拟机进行通信的反向代理中解决。但是我客户组织的一名 IT 人员建议,如果我的 symfony 应用程序正确地吐出 url,那会更容易。
所以,在我(可能是错误地)要求 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
Run Code Online (Sandbox Code Playgroud)
但这似乎并不适用于整个 symfony 的 url 系统。我还在 apache 的 mod_proxy 和 mod_rewrite 中尝试了一些奇怪的配置,但没有成功。
所以,简而言之,我绝对一无所知,所以任何想法都将不胜感激。提前致谢。
小智 3
我自己也遇到了类似的问题。在这种情况下,url 重写将无济于事,因为 symfony$_SERVER
根据 app.php 脚本位置从变量获取基本路径。REQUEST_URI
将会是/fakedirectory/
,但是SCRIPT_NAME
将会是/app.php
,所以基本路径变成/
并被fakedirectory
视为 symfony 路由器路径。
解决方案:
创建一个假目录符号链接。在 web 目录中运行ln -s . fakedirectory
.
现在,REQUEST_URI
您的值/fakedirectory/
将SCRITP_NAME
等于/fakedirectory/app.php
并且所有资产或路由器路径都将具有正确的/fakedirectory/
基本路径。
归档时间: |
|
查看次数: |
1926 次 |
最近记录: |