我试图解决在一个域上托管 Geoserver 地图图层以及通过 OpenLayers WMSGetFeatureInfo 在另一个域上访问它们的 html 文件所涉及的跨域问题。当然,当html 文件在同一个域上时,这很好用(单击多边形,您应该会得到一个包含该功能信息的弹出窗口)。我在这个网站和其他网站上看到过一些类似的帖子,但没有一个能解决这个问题:
当我提交包含我的 php 代理的 URL 时,例如http://greengeography.org/projects/oregonwild/curlproxy3.php?url=http://www.google.com,它工作正常。但是当我尝试来自我的 Amazon EC2 站点(运行 Linux 和 Tomcat 6 btw)的任何 URL 时,例如http://greengeography.org/projects/oregonwild/curlproxy3.php?url=http://50.112.123.161:8080,结果我得到一个0。并且该 IP 地址可以自行访问。
这是我的 php(我也尝试过get_file_contents方法):
<?php
$url = $_REQUEST["url"];
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
'POST HTTP/1.0',
'Content-type: text/xml;charset="UTF-8"',
'Accept: text/xml',
'Cache-Control: no-cache',
'Pragma: no-cache'
));
$theData = curl_exec($curl);
curl_close($curl);
echo $theData;
?>
还有我的 OpenLayers/GeoExt:
OpenLayers.ProxyHost = "curlproxy3.php?url=";
var featureInfo = new OpenLayers.Control.WMSGetFeatureInfo({
url: 'http://50.112.123.161:8080/geoserver/OR_wild_wkspc/wms',
queryVisible: true,
FEATURE_COUNT: 1,
exceptions: "application/vnd.ogc.se_xml",
layerUrls: ["http://50.112.123.161:8080/geoserver/gwc/service/wms"],
eventListeners: {
getfeatureinfo: function(e) {
new GeoExt.Popup({
title: "Feature Info",
width: 400,
autoHeight: true,
autoScroll: true,
queryVisible: true,
map: map,
lonlat: mapPanel.map.getLonLatFromPixel(e.xy),
html: e.text
}).show();
}
}
});
mapPanel.map.addControl(featureInfo);
featureInfo.activate();
另外,很抱歉,这是一个小问题,在我让代理工作之前我什至无法解决,但是当我点击主站点上的一个功能时,我收到以下信息:未捕获的类型错误:无法读取属性'x' 的 null。也无法弄清楚那个。
有什么想法吗?我认为这是 Tomcat 或我的 Linux/Amazon 环境中的某些设置的问题,而不是 php,因为我对指向其他站点的代理没有问题。哦,我的 php 经验很少,所以如果可能的话,请把它放低。谢谢!