現在、mod_proxyを使用して別のサーバーで検索リクエストを作成しようとしています。リモートサーバー要求は、次のように構成する必要があります。
http://path.to.remote/search.php?key=MYKEY&term=SEARCHTERM
アクセスキーを難読化するために、vhost定義内に認証を含めることを望んでいました。キーはクエリ文字列値として渡される必要があるため、次のように簡単だと思いました。
ProxyPass /lookup/t/ http://path.to.remote/search.php?key=MYKEY&term=
私のURLはどのようになりますか
http://localhost/lookup/t/term=SEARCHTERM
ProxyPassがターゲットURLで必須の文字エスケープを実行しているため、URLが使用できなくなっていることにすぐに気付きました。主に以前にエンコードされた文字で同様の問題を抱えている人がたくさんいて、ProxyPassを使用したURLエンコードは避けられませんでした。
Mod_rewriteを使用してプロキシ要求をアセンブルする必要があるという提案をいくつか見つけましたが、その方法がわかりませんでした。私はvhost定義に次のようなルールを作成しました。
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/lookup/t/
RewriteRule ^/lookup/t/$ http://path.to.remote/search.php?key=MYKEY&term=$1
私はmod_rewriteの経験があまりなく、正規表現のスキルも優れていないので、URLを書き換える方法と、必要に応じてmod_proxyを介してURLをファネルする方法を誰かに説明してもらいたいと思います。次のようにクエリ文字列をアセンブルするためにrewriteを使用する必要があると考えるのは正しいですか?
Http://localhost/lookup/t/term=SEARCHTERM
Http://localhost/lookup/t/?key=MYKEY&term=SEARCHTERM
次に、modプロキシを使用して
/lookup/t/
に
http://path.to.remote/search.php
私の疑惑は正しいことがわかった。 mod_rewriteを使用してクエリ文字列を変更してから、宛先にプロキシする必要がありました。最終的には:
リライトをオンにして、vhostdefにルールを追加しました。また、デバッグのためにロギングをオンにしました。ディレクトリのリクエストを書き換えることができないことを知ったので、スクリプトを指定する必要がありました。また、QSAおよびPオプションを使用する必要がありました。
RewriteEngineオン
RewriteRule ^ /lookup.php/lookup?key = MYKEY [QSA、P]
プロキシルールを設定しました。クエリ文字列が作成されるため、単純なプロキシルールが適用されます。
ProxyPass/lookup https://path.to.remote/search.php
ProxyPassReverse/lookup https://path.to.remote/search.php
Apacheを再起動することを忘れないでください! (やった)
http://localhost/lookup.php?term=SEACRHTERM
に接続します