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

「ページが見つかりません」というエラーが表示されます。

ログを見ると、手順は同じようです。上記の 2 つの要求のログ エントリは次のとおりです。

[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

[QSA]フラグを試しましたが、リモートサーバーにリクエストを送信しなくても、ページが404をスローしているように見えます。

x.rwhlp?p = 2は、isapi_rewrite 3のインストールによって.rwhlp拡張子のハンドラーが作成されたため(私が知る限り)、コンポーネントによって追加されます。これは、その動作方法のようです。ただし、ターゲットサーバーに対して行われた要求には、URLへのこの追加部分は含まれていません。

于 2010-07-20T07:29:18.387 に答える
0

Apache では、[QSA] フラグを使用して元のクエリ文字列を追加しますが、isapi_rewrite については不明です。この幻想的なx.rwhlp?p=2追加はどこから来るのですか?

于 2010-07-19T17:11:49.787 に答える
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 に答える