【问题标题】:Mapserver Correct Mod Rewrite ruleMapserver 正确的 Mod 重写规则
【发布时间】:2022-06-13 22:28:02
【问题描述】:

我想改变这个:

https://<our server>/cgi-bin/mapserv?map=/usr/share/mapserv/mapfile.map&service=wms&version=1.3.0&request=GetCapabilities

到这里:

https://<our server>/wms?service=WMS&version=1.3.0&request=GetCapabilities

所以我启用了 apache2 mod-rewrite 并根据 Mapserver 文档使用以下规则创建了一个 .htaccess 文件:

RewriteEngine on
RewriteRule wms?(.*) /cgi-bin/mapserv?map=/usr/share/mapserv/mapfile.map&$1

我还将此规则调整为多种变体,以尝试使其正常工作,但无济于事。

第一个链接按预期返回 xml。

第二个链接返回此错误:

mapserv(): Web application error. Traditional BROWSE mode requires a TEMPLATE in the WEB section, but none was provided.

我有一个运行重写的错误日志,示例跟踪如下:

[Thu Jun 09 18:54:22.033848 2022] [rewrite:trace3] [pid 40275:tid 140188000974592] mod_rewrite.c(483): [client <browser IP>:62351] <browser IP> - - [<our server>/sid#7f80151c0340][rid#7f80147130a0/initial] [perdir /var/www/html/] strip per-dir prefix: /var/www/html/wms -> wms
[Thu Jun 09 18:54:22.033855 2022] [rewrite:trace3] [pid 40275:tid 140188000974592] mod_rewrite.c(483): [client <browser IP>:62351] <browser IP> - - [<our server>/sid#7f80151c0340][rid#7f80147130a0/initial] [perdir /var/www/html/] applying pattern 'wms?(.*)' to uri 'wms'
[Thu Jun 09 18:54:22.033864 2022] [rewrite:trace2] [pid 40275:tid 140188000974592] mod_rewrite.c(483): [client <browser IP>:62351] <browser IP> - - [<our server>/sid#7f80151c0340][rid#7f80147130a0/initial] [perdir /var/www/html/] rewrite 'wms' -> '/cgi-bin/mapserv?map=/usr/share/mapserv/gni_wms.map&'
[Thu Jun 09 18:54:22.033870 2022] [rewrite:trace3] [pid 40275:tid 140188000974592] mod_rewrite.c(483): [client <browser IP>:62351] <browser IP> - - [<our server>/sid#7f80151c0340][rid#7f80147130a0/initial] split uri=/cgi-bin/mapserv?map=/usr/share/mapserv/gni_wms.map& -> uri=/cgi-bin/mapserv, args=map=/usr/share/mapserv/gni_wms.map
[Thu Jun 09 18:54:22.033877 2022] [rewrite:trace2] [pid 40275:tid 140188000974592] mod_rewrite.c(483): [client <browser IP>:62351] <browser IP> - - [<our server>/sid#7f80151c0340][rid#7f80147130a0/initial] [perdir /var/www/html/] trying to replace context docroot /var/www/html with context prefix
[Thu Jun 09 18:54:22.033883 2022] [rewrite:trace1] [pid 40275:tid 140188000974592] mod_rewrite.c(483): [client <browser IP>:62351] <browser IP> - - [<our server>/sid#7f80151c0340][rid#7f80147130a0/initial] [perdir /var/www/html/] internal redirect with /cgi-bin/mapserv [INTERNAL REDIRECT]

我认为重定向没有处理 GET 参数是否正确?

这意味着我的规则是错误的,因此将错误的请求字符串传递给 mapserver 从而导致错误?

【问题讨论】:

    标签: apache mod-rewrite mapserver


    【解决方案1】:

    也在 MapServer 用户列表上提出了这个问题,Trond Michelsen 的回复对其进行了排序,他建议将重写标志 QSA(查询字符串附加)添加到规则中。 正如我认为重写规则没有传递查询参数一样。 对我有用的正确规则是:

    RewriteRule wms /cgi-bin/mapserv?map=/usr/share/mapserv/mapfile.map [QSA]

    【讨论】:

      猜你喜欢
      • 2010-11-13
      • 2012-05-13
      • 2012-06-14
      • 1970-01-01
      • 1970-01-01
      • 2015-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多