尝试从另一台服务器包含SSI时,Apache为什么会得到404?

时间:2019-02-07 18:55:31

标签: apache ssi

我有两个网站,这些网站产生的数据我想合并到一个网页中。 站点一(“主”站点)产生了大部分网页,而站点二包含了我想包含在该页面上的其他数据。 我认为最好的方法是使用SSI将来自“第二站点”的数据包含到“第一站点”产生的网页中。 站点一上的Apache似乎可以正确地联系站点二,但是站点二返回404。如果我联系站点二 >直接使用浏览器,并使用与 site one 完全相同的URL,我可以获得正确的数据。为什么站点一上的Apache无法获得相同的数据?

我尝试了两种方法来包含来自站点2 的数据,一种是直接使用,另一种是使用反向代理,但这两种方法都不起作用。其他(本地)SSI和反向代理在此页面上工作正常。这是两个包含行:

<!--#include virtual="/servertwodata" -->
<!--#include virtual="http://www.servertwo.com/execs/somescript.sh?task=overview" -->

我在Apache错误日志中得到的错误是:

unable to include "http://www.servertwo.com/execs/somescript.sh?task=overview" in parsed file /var/www/html/index.html, subrequest returned 404, referer: http://www.serverone.com/index.html

有人知道为什么站点上的Apache将从站点2 获得404,但是在通用浏览器中使用完全相同的URL可以得到很好的数据吗?

2 个答案:

答案 0 :(得分:0)

来自the documentation

  

该值为URL路径(%编码)。 URL 不能包含方案或主机名,只能包含路径和可选的查询字符串。如果它不是以斜杠(/)开头,则认为它是相对于当前文档的。

简而言之:它不支持外部URL。

答案 1 :(得分:0)

事实证明,反向代理确实会丢弃任何包含在proxypass配置参数中的查询字符串。我从proxypass参数中删除了查询字符串,并将其移至SSI include virtual 标记,它不再从站点2 获取404。 。 放在网页上的响应是混乱的象形文字,但这是什么引起了另一个问题。