我正在构建一个基于 OpenLayers 的地图应用程序,该应用程序使用 GeoServer 提供地图数据。我遇到的问题是,除了通过 WMS 请求的地图图像外,我还使用 jQuery AJAX 从 GeoServer 获取信息。由于 GeoServer 在不同端口上运行,我的请求因 JavaScript 中的跨站点脚本安全策略而被阻止。
作为 Java 应用程序,GeoServer 在 Apache 的 8080 端口上运行,而我的 IIS 实例在 80 端口上运行。我决定不建立代理,而是在 IIS7 中使用 URL 重写来解决这个问题。我正在关注本指南,但仍然不起作用。以下是我的 URL 重写规则设置:
- 匹配 URL:
(.*)
- 健康)状况:
{HTTP_URL}
匹配/geoserver
- 行动:重写为
http://localhost:8080/{R:1}
,附加查询字符串
然而,当我请求时http://localhost/geoserver/wms?QUERY_LAYERS=SanDiego:FWSA_sandiego&LAYERS=SanDiego:FWSA_sandiego&SERVICE=WMS&VERSION=1.1.1&FEATURE_COUNT=20&REQUEST=GetFeatureInfo&EXCEPTIONS=application/vnd.ogc.se_xml&BBOX=-13009123.590156,3862057.2905992,-13006066.109025,3865114.7717302&INFO_FORMAT=text/html&x=20&y=20&width=40&height=40&srs=EPSG:900913
,我得到的只是 404,尽管在端口 8080 上发出的相同请求返回了正确的结果。
我究竟做错了什么? 提前致谢。
答案1
对于条件,请尝试 {URL} 而不是 {HTTP_URL},对于操作,请确保它是重定向而不是重写。
答案2
相同的规则是否会拾取 8080 的请求并尝试无限期地重写它?不过,我认为如果是这样的话,超时或查询字符串长度错误将是预期的结果,而不是 404。
您使用失败请求跟踪吗?使用 Fiddler 吗?跟踪 http.sys 吗?