我会尽力解释这个场景,因为它看起来有点复杂。
我正在为一个大型组织构建此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中尝试了一些奇怪的配置而没有运气。
所以,简而言之,我绝对无能为力,所以任何想法都会受到赞赏。提前谢谢。
答案 0 :(得分:1)
我认为您可以使用RewriteBase规则解决此问题吗?
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /fakedirectory/web
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ app.php [QSA,L]
</IfModule>