我已经安装了 isapi_rewrite 的完整版本并设置了代理指令,以便文件夹“ngis”(在任何端口上)中到我的工作站的所有流量都转到另一台服务器。这是为了在将 isapi_redirect 推广到我们的产品服务器之前检查适用性的测试目的。
我有一个规则如下:
RewriteRule ^ngis/(.+)$ http://10.2.25.157:8080/ngis/$1 [NC, P]
当我输入如下 URL 时,这非常有效:
http://10.1.111.20:8080/ngis/QueryEngine.ptl/DocTree(%60/2007/MELBOURNE/R01%60,%601%60).xml
但是,如果我输入带有查询字符串的 UIRL,例如:
http://10.1.111.20:8080/ngis/QueryEngine.ptl/DocTree(%60/2007/MELBOURNE/R01%60,%601%60).xml?VIEW=RAW
我收到“找不到页面”错误。
在日志中查看步骤似乎是相同的。这是上面两个请求的日志条目:
[10.1.111.20/sid#1][rid#11050940/initial] (2) init rewrite engine with requested uri /ngis/QueryEngine.ptl/DocTree(`/2007/MELBOURNE/R01`,`1`).xml
[10.1.111.20/sid#1][rid#11050940/initial] (1) Htaccess process request C:\Program Files\Helicon\ISAPI_Rewrite3\httpd.conf
[10.1.111.20/sid#1][rid#11050940/initial] (1) Htaccess process request c:\inetpub\wwwroot\.htaccess
[10.1.111.20/sid#1][rid#11050940/initial] (3) applying pattern '^ngis/(.+)$' to uri 'ngis/QueryEngine.ptl/DocTree(`/2007/MELBOURNE/R01`,`1`).xml'
[10.1.111.20/sid#1][rid#11050940/initial] (2) forcing proxy-throughput with http://10.2.25.157:8080/ngis/QueryEngine.ptl/DocTree(`/2007/MELBOURNE/R01`,`1`).xml
[10.1.111.20/sid#1][rid#11050940/initial] (1) go-ahead with proxy request http://10.2.25.157:8080/ngis/QueryEngine.ptl/DocTree(`/2007/MELBOURNE/R01`,`1`).xml [OK]
[10.1.111.20/sid#1][rid#11050940/initial] (1) Rewrite URL to >> http://10.2.25.157:8080/ngis/QueryEngine.ptl/DocTree(`/2007/MELBOURNE/R01`,`1`).xmlx.rwhlp?p=2
[10.1.111.20/sid#1][rid#11050940/initial] (2) rewrite 'ngis/QueryEngine.ptl/DocTree(`/2007/MELBOURNE/R01`,`1`).xml' -> 'http://10.2.25.157:8080/ngis/QueryEngine.ptl/DocTree(`/2007/MELBOURNE/R01`,`1`).xmlx.rwhlp?p=2'
[10.1.111.20/sid#1][rid#11050940/initial] (2) internal redirect with http://10.2.25.157:8080/ngis/QueryEngine.ptl/DocTree(`/2007/MELBOURNE/R01`,`1`).xmlx.rwhlp?p=2 [INTERNAL REDIRECT]
[10.1.111.20/sid#1][rid#11050940/initial] (2) init rewrite engine with requested uri /ngis/QueryEngine.ptl/DocTree(`/2007/MELBOURNE/R01`,`1`).xml?VIEW=RAW
[10.1.111.20/sid#1][rid#11050940/initial] (1) Htaccess process request C:\Program Files\Helicon\ISAPI_Rewrite3\httpd.conf
[10.1.111.20/sid#1][rid#11050940/initial] (1) Htaccess process request c:\inetpub\wwwroot\.htaccess
[10.1.111.20/sid#1][rid#11050940/initial] (3) applying pattern '^ngis/(.+)$' to uri 'ngis/QueryEngine.ptl/DocTree(`/2007/MELBOURNE/R01`,`1`).xml'
[10.1.111.20/sid#1][rid#11050940/initial] (2) forcing proxy-throughput with http://10.2.25.157:8080/ngis/QueryEngine.ptl/DocTree(`/2007/MELBOURNE/R01`,`1`).xml?VIEW=RAW
[10.1.111.20/sid#1][rid#11050940/initial] (1) go-ahead with proxy request http://10.2.25.157:8080/ngis/QueryEngine.ptl/DocTree(`/2007/MELBOURNE/R01`,`1`).xml?VIEW=RAW [OK]
[10.1.111.20/sid#1][rid#11050940/initial] (1) Rewrite URL to >> http://10.2.25.157:8080/ngis/QueryEngine.ptl/DocTree(`/2007/MELBOURNE/R01`,`1`).xml?VIEW=RAWx.rwhlp?p=2
[10.1.111.20/sid#1][rid#11050940/initial] (2) rewrite 'ngis/QueryEngine.ptl/DocTree(`/2007/MELBOURNE/R01`,`1`).xml' -> 'http://10.2.25.157:8080/ngis/QueryEngine.ptl/DocTree(`/2007/MELBOURNE/R01`,`1`).xml?VIEW=RAWx.rwhlp?p=2'
[10.1.111.20/sid#1][rid#11050940/initial] (2) internal redirect with http://10.2.25.157:8080/ngis/QueryEngine.ptl/DocTree(`/2007/MELBOURNE/R01`,`1`).xml?VIEW=RAWx.rwhlp?p=2 [INTERNAL REDIRECT]
如您所见,就 isapi_rewrite 而言,它已经完成了它的工作。但是,我可以确认目标服务器没有收到请求(因为我们当时正在调试它以尝试诊断问题!)
这个问题似乎是由“?”的存在引起的。和一些查询字符串参数。
我已经尝试了 RewriteRule 和 RewriteProxy 并得到了同样的问题。
有任何想法吗?干杯。