我正试图解决在一个域上托管Geoserver地图图层所涉及的跨域问题,以及通过another domain上的OpenLayers WMSGetFeatureInfo访问它们的html文件。当然,当html file is on the same domain(点击一个多边形时,你应该得到一个带有该特征信息的弹出窗口)时,这样可以正常工作。我在这个网站和其他网站上看过一些类似的帖子,但没有一个解决了这个问题:
当我提交包含我的php代理的URL时,例如http://greengeography.org/projects/oregonwild/curlproxy3.php?url=http://www.google.com,它可以正常工作。但是,当我尝试从我的Amazon EC2站点(运行Linux和Tomcat 6顺便说一句)的任何URL(例如http://greengeography.org/projects/oregonwild/curlproxy3.php?url=http://50.112.123.161:8080)时,我得到一个0。并且可以很好地访问该IP地址on its own。
这是我的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();
此外,并且道歉,因为这是一个侧面问题,我甚至无法解决,直到我让代理工作,但当我点击主网站上的功能,我收到以下内容:未捕获的TypeError:无法读取null的属性“x”。也未能想出那一个。
有什么想法?我认为这是Tomcat或我的Linux / Amazon环境中的一些设置而不是php的问题,因为我对指向其他站点的代理没有任何问题。哦,我有很少的PHP经验,所以请尽可能愚蠢。谢谢!