1

我已经安装了 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 并得到了同样的问题。

有任何想法吗?干杯。

4

3 回答 3

0

您必须像这样打破 query_string:

RewriteCond %{QUERY_STRING} ^p=2$ [NC]

RewriteRule ^x\.rwhlp$ NewLocation [NC,R=301,P]

任何时候你点击“?”,你必须打破“?”后面的任何东西。到 query_string 条件。URL 必须以这种方式分解以处理字符串和页面调用。

于 2014-06-27T16:59:50.357 回答
0

在 apache 中,我们使用 [QSA] 标志添加原始查询字符串,不确定 isapi_rewrite。这个虚幻x.rwhlp?p=2的附加从何而来?

于 2010-07-19T17:11:49.787 回答
0

我已经尝试了 [QSA] 标志,但页面似乎仍然抛出 404,甚至没有向远程服务器发出请求。

x.rwhlp?p=2 由组件附加(据我所知),因为 isapi_rewrite 3 的安装为 .rwhlp 扩展创建了一个处理程序——这似乎是它的工作方式。但是,向目标服务器发出的请求不包括 URL 的这个附加部分。

于 2010-07-20T07:29:18.387 回答