重写Apache查询字符串

重写Apache查询字符串,apache,web-services,redirect,url-rewriting,Apache,Web Services,Redirect,Url Rewriting,我有一个查询字符串URL:http://localhost/cgi-bin/qgis_mapserv.fcgi?map=/home/qgis/project/map.qgs. 我想在变量map中找到map.qgs路径。除了map变量外,还有一些变量(版本、请求、服务等)。 以下是我需要的: 重写规则: 模式:^cgi-bin/qgis_-mapserv.fcgi?map=map.qgs&()$ 替换:^cgi-bin/qgis_-mapserv.fcgi?map=/home/qgis/proje

我有一个查询字符串URL:http://localhost/cgi-bin/qgis_mapserv.fcgi?map=/home/qgis/project/map.qgs. 我想在变量map中找到map.qgs路径。除了map变量外,还有一些变量(版本、请求、服务等)。 以下是我需要的:

重写规则: 模式:^cgi-bin/qgis_-mapserv.fcgi?map=map.qgs&()$ 替换:^cgi-bin/qgis_-mapserv.fcgi?map=/home/qgis/project/map.qgs&()$

查找以下我失败的尝试:

RewriteEngine On
RewriteCond %{REQUEST_URI}  ^/cgi-bin/qgis_mapserv.fcgi$
RewriteCond %{QUERY_STRING} ^map=([A-Za-z0-9.-_]+)$
RewriteRule ^cgi-bin/qgis_mapserv.fcgi?(.*)$ cgi-bin/qgis_mapserv.fcgi?$1
注意:map变量可以显示在模式uRL中其他变量中的任何位置

我想知道我在上面的代码中遗漏了什么

你就快到了。 规则不起作用的原因是无法在重写规则的模式中测试queryString

您需要将规则的模式更改为

  RewriteRule ^cgi-bin/qgis_mapserv.fcgi$
通过此更改,您的htaccess规则将如下所示:

RewriteEngine On
RewriteCond %{REQUEST_URI}  ^/cgi-bin/qgis_mapserv.fcgi$
RewriteCond %{QUERY_STRING} ^map=([A-Za-z0-9./-_]+)/map.qgs$
RewriteRule ^/?cgi-bin/qgis_mapserv.fcgi$ /cgi-bin/qgis_mapserv.fcgi?%1 [R,L]

规则仍然缺少一些东西。查询在qgis_maserv.fcgi之后开始?然后是第二次重写:RewriteCond%{QUERY\u STRING}^map=([A-Za-z0-9./-\u]+)\.qgs$根据2个RewriteCond变量map可以只有一个文件名。qgs(模式)RewriteRule模式替换RewriteRule ^cgi bin/qgis\u mapserv.fcgi\?$/cgi bin/qgis\u mapserv.fcgi?map=/home/qgis/project/%1[NC,QSA,R,L]引擎在RewriteCond%{REQUEST_URI}^cgi bin/qgis_mapserv.fcgi$RewriteCond%{QUERY_STRING}^map=map.qgs$RewriteRule^cgi bin/qgis_mapserv.fcgi\?$/cgi bin/qgis_mapserv.fcgi?map=/home/qgis/project/%1[NC,QSA,R,L]为了测试重写规则,我刚刚给map变量(map.qgs)起了个名字。但是重写规则仍然不能完成工作。重写引擎在#RewriteCond%{QUERY_STRING}key=value#RewriteRule(.*)/path/[R=302,L]RewriteCond%{QUERY_STRING}^map=/home/qgis/project/[A-Za-z0-9./-\u]+)。qgs$[NC]RewriteRule^/?cgi-bin/qgis\u-mapserv.fcgi$/cgi-bin/qgis\u-mapserv.fcgi?%1[NC,QSA,R,L]@HelpOverFlow抱歉无法回复您的消息,因为通知丢失。您能告诉我这个问题现在是否解决了吗?如果您仍然需要我的帮助,可以询问。谢谢