В настоящее время я пытаюсь использовать 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-адрес непригодным для использования. Я нашел множество людей, у которых были похожие проблемы, в основном с ранее закодированными символами, и кодирование URL-адресов с помощью ProxyPass было неизбежным.
Я нашел несколько советов, что мне следует использовать 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. Правильно ли я считаю, что мне нужно использовать перезапись, чтобы собрать строку запроса следующим образом:
Http://localhost/lookup/t/term=SEARCHTERM
Http://localhost/lookup/t/?key=MYKEY&term=SEARCHTERM
а затем используйте мод-прокси, чтобы перейти от
/lookup/t/
к
http://path.to.remote/search.php
Мои подозрения оправдались. Мне пришлось изменить строку запроса с помощью mod_rewrite, а затем проксировать ее в пункт назначения. В конце концов:
Я включил перезапись и добавил правило в свой vhost def. Я также включил ведение журнала для отладки. Я узнал, что не смогу переписать запрос каталога, поэтому мне пришлось указать на скрипт. Мне также пришлось использовать варианты QSA и P:
RewriteEngine On
RewriteRule ^ / lookup.php / lookup? Key = MYKEY [QSA, P]
Я настроил свои правила прокси. Поскольку строка запроса построена, применяются простые правила проксирования:
ProxyPass / поиск https: //path.to.remote/search.php
ProxyPassReverse / поиск https: //path.to.remote/search.php
Не забудьте перезапустить apache! (Я сделал)
http://localhost/lookup.php?term=SEACRHTERM