我们的本地开发设置需要DMZ中的一个框,并且每个开发人员在其apache配置中都有一行用于代理。看起来像:
ProxyPreserveHost on
ProxyPass /user1/ {user1's IP}
ProxyPassReverse /user1/ {user1's IP}
ProxyPass /user2/ {user2's IP}
ProxyPassReverse /user2/ {user2's IP}
#etc
我们的公开网址变为{DMZ server}/user1
,{DMZ server}/user2
等。问题就是在开发框中,$_SERVER['HTTP_HOST']
的值只是{{1 ,没有用户的子目录。期望的行为是将{DMZ server}
作为真正的主机名。
我已经尝试重写HOST var和一些重写规则,但没有任何效果。
创建子域不是一种选择。
谢谢你的帮助!
答案 0 :(得分:3)
答案 1 :(得分:1)
我要采取刺激并建议:
SetEnvIf Host (.*) custom_host=$1
RequestHeader set X-Custom-Host-Header "%{custom_host}e/%{REQUEST_URI}e/%{QUERY_STRING}e"
这应该有希望设置一个名为X-Custom-Host-Header的请求标头,然后您可以在PHP中获取。如果你愿意,你可以尝试覆盖Host Header,但我不确定它的含义。 Host标头是一个特殊的HTTP标头,通常只包含HTTP请求的主机部分,而不是完整的请求URL。
不幸的是,未经测试,但如果你能更详细地澄清一下你在寻找什么,这将有所帮助。
答案 2 :(得分:0)
看起来Apache之前已经听过这个投诉,解决方案是mod_substitute
。您需要使用它来重写文档中返回的所有URL以插入/user1/
。
根据您评论中的其他信息,我会说您的DMZ服务器上的Apache配置是正确的。您要求的是让开发人员机器生成包含其上下文路径的URL(这是类似于您的/user1/
位的J2EE术语)。我没有任何PHP经验,所以我不知道它是否有这样的设施,而是快速搜索suggests it does not。
否则,您必须滚动自己的函数,将相对URL转换为绝对URL,使其可配置,以便您可以将其添加到主机名,然后强制每个人专门使用该函数生成网址。有关某些指导,请参阅this old (outdated?) PHP best practices article中的“使您的应用程序位置独立”,以找到查找本地文件相关问题的解决方案。
以前的答案:(不起作用,导致重定向循环)
我仍然不清楚你想要做什么或者你的意思是“在开发应用程序上运行主要是apache和PHP,用于托管各种应用程序”,但是作为一个有根据的猜测,你试过了吗?
ProxyPass /user1/ {user1's IP}/user1/
ProxyPassReverse /user1/ {user1's IP}/user1/
如果我正在设置你似乎想要拥有的那种环境,我希望$_SERVER['HTTP_HOST']
在每台开发机器上都是{DMZ server}
,这样开发机器的环境看起来就像(或者至少更像是对其上运行的代码进行生产。