配置Apache作为QUERY_STRING

时间:2019-01-27 01:32:40

标签: apache cgi-bin

我正在模拟通过HTML命令控制的嵌入式设备。控制器发出URL,例如

http://192.168.0.10/cgi-bin/aw_cam?cmd=QFT&res=1

并且这些以特定方式影响设备。我的目标是制作设备的仿真器,因此我需要捕获并处理所有此类请求。我已经成功配置了Apache来调用我的脚本,并且可以通过读取QUERY_STRING的值来访问“ cmd = QFT&res = 1”控制字符串。我在Ubuntu 16.04.5上使用Apache 2.4.18。这些脚本是用C ++编写的。

我遇到的问题是控制器发出的某些命令具有以下形式:

http://192.168.0.10/cgi-bin/aw_ptz?cmd=#P80&res=1
http://192.168.0.10/cgi-bin/aw_ptz?cmd=#T50&res=1  

无论出于何种原因,设计命令结构的人都决定将#字符用作命令的一部分。但是,由于“#”定界了URL的片段部分,因此它后面的信息永远不会传递到我的脚本中,该脚本仅接收“ cmd =“

有什么方法可以强制Apache在?之后传递整个字符串?我的剧本?我不能更改客户端或协议,只能更改服务器端。

编辑: apache日志显示了整个URL(请参阅下面的日志文件的一部分),因此,即使#被认为是片段定界符,它也至少会将其放入日志文件中,而不是cgi脚本。

192.168.0.9 - - [27/Jan/2019:00:21:10 +0000] "GET /cgi-bin/aw_ptz?cmd=#P53&res=1 HTTP/1.0" 200 151 "-" "-"
192.168.0.9 - - [27/Jan/2019:00:21:11 +0000] "GET /cgi-bin/aw_ptz?cmd=#P66&res=1 HTTP/1.0" 200 151 "-" "-"
192.168.0.9 - - [27/Jan/2019:00:21:11 +0000] "GET /cgi-bin/aw_ptz?cmd=#P99&res=1 HTTP/1.0" 200 151 "-" "-"
192.168.0.9 - - [27/Jan/2019:00:21:11 +0000] "GET /cgi-bin/aw_ptz?cmd=#P76&res=1 HTTP/1.0" 200 151 "-" "-"

1 个答案:

答案 0 :(得分:0)

这似乎可行:

RewriteCond %{THE_REQUEST} \s(.*)#(.*)\s
RewriteRule ^ http://localhost:8000%1#%2 [P,NE]
ProxyPass / http://localhost:8000/
ProxyPassReverse / http://localhost:8000/

((我有python简单的http服务器在localhost:8000上侦听,以验证哈希是否正确传递