web-dev-qa-db-ja.com

Apache 2.4でプロキシする前にURLリクエストの一部を置き換える方法は?

プロキシが実行される前にURLの一部(https://myfirstdomain.com/lool/https:/alf.mydomain.com/service/wopi/files/uuid?query_params)を書き直そうとしていますが、デフォルトのSSL仮想ホストに次の関連セクションがあります。

 <IfModule mod_rewrite.c>
    RewriteEngine   On
    LogLevel debug rewrite:trace3

    RewriteRule ^lool/https:/alf.mydomain.com\/(.*) lool/https://alf.mydomain.com/$1 [QSA,NE]
</IfModule>

ProxyPass               /       https://localhost:2323/
ProxyPassReverse        /       https://localhost:2323/

そして私はこれを書き換えログに見ます:

applying pattern '^lool/https:/alf.mydomain.com' to uri '/lool/https:/alf.mydomain.com/service/wopi/files/uuid

しかし、これを受け取るサービスでは、URLが書き直されていないことがわかります。私が間違っていることについての手がかりをいただければ幸いです。私は基本的に、アクセスできないインフラストラクチャのどこかにプロキシサーバーによって削除された余分な/を追加しようとしています。

EDIT:バックエンドWOPIサービスのログで、変更されていないリクエストURLが表示されます。

Request from 127.0.0.1:42035: GET /lool/https:/alf.mydomain.com/service/wopi/files/uuid
1
Dark Star1
RewriteRule ^lool/https:/alf.mydomain.com\/(.*) lool/https://alf.mydomain.com/$1 [QSA,NE]

仮想ホストコンテキストで使用する場合、RewriteRulepatternは、スラッシュプレフィックスを含む完全なURLパスに一致します(これは-でのみ削除されます) ディレクトリコンテキスト)。

代わりに、次のようなものを試してください。

RewriteRule ^/lool/https:/(alf\.mydomain\.com/.*) /lool/https://$1 [PT,NE]

スラッシュプレフィックスは、仮想ホストコンテキストで使用する場合、ドキュメントルートの相対URLパスを指定するために、substitutionにも必要です。

substitutionの繰り返しを保存するために、キャプチャされたパターンを拡張してホスト名を含めました。

リテラルドットはRewriteRulepatternでエスケープする必要があります。一方、スラッシュ(/)はエスケープする必要はありません。

substitutionでクエリ文字列を指定していないため、ここではQSAフラグは不要です。

Mod_proxyでこれを取得するには、PTpassthrough)フラグが必要な場合と不要な場合があります。

また、<IfModule mod_rewrite.c>ラッパーを削除する必要があります-これがmod_rewriteなしで機能することを意図していない限り?それ以外の場合は、mod_rewriteが使用できないときにエラーをマスクするだけです。

1
MrWhite