Как прокси-запросы на локальный хост к нелокальному URL
681
Xgongiveittoya
Я настраиваю локальную среду для тестирования с использованием WAMP.
Приложение (угловое приложение) находится в каталоге / wamp / www / app /. Он отправляет запросы другому API, отправляя запросы другому маршруту на том же сервере. (Специально для / wamp / www / api / route)
Когда я копирую этот файл .htaccess в мой каталог / wamp / www / api / route /, я ожидаю следующее поведение:
Что я хочу
Приложение отправит запрос в / wamp / www / api / route / stuff /, а файл .htaccess в / route / примет этот запрос и перенаправит его на http://api.com/stuff.
Что я получаю
Приложение отправит запрос в / wamp / www / api / route / stuff / и вернет 404.
Я убедился, что AllowOverride all установлен, что механизм перезаписи включен, и что mod-rewrite включен. Я знаю, что файл .htaccess просматривается, потому что, если я добавлю в него мусор, я получу 500 вместо 404, и мой мусор попадет в журнал.
Любая помощь приветствуется! Благодарю.
После получения помощи от Purefan я включил ведение журнала перезаписи, и после включения не было попыток перезаписи, что указывало бы на то, что правило перезаписи никогда не выполняется для запросов.
Теперь я попытался изменить порядок вызова правила перезаписи.
Я создал каталог в файле конфигурации httpd следующим образом:
Помните, что вы переписываете запрос, основываясь на URI, а не на папках. Когда apache получает запрос, он сопоставляет его с набором правил в блоках VirtualHost, если запрос соответствует одному из блоков VirtualHost, то правила в этом блоке обрабатывают запрос. Когда приложение отправляет запрос `localhost`, возможно, блок с DocumentRoot` / wamp / www / api / route / stuff` перехватывает его, но, возможно, это не так. Проверьте свои журналы доступа, установите один другой для VirtualHost, чтобы сделать его проще
Purefan 7 лет назад
1
Вы также можете включить [переписать журнал] (http://httpd.apache.org/docs/current/mod/mod_rewrite.html), чтобы помочь вам увидеть, что переписывается и как
Purefan 7 лет назад
1
Переписать журнал звучит полезно. Я посмотрю на это и вернусь. Спасибо!
Xgongiveittoya 7 лет назад
0
Запрос отправляется в правильное место, как это может показаться, но при входе в систему перезаписи, кажется, ничего не переписывается. [03 / Feb / 2017: 11: 02: 01 -0500] "GET / api / route / stuff
Xgongiveittoya 7 лет назад
0
1 ответ на вопрос
1
Xgongiveittoya
Благодаря Purefan, с включенным журналом перезаписи, я увидел, что перезапись пыталась переписать, но затем запрос так и не был отправлен.
Когда я удалил флаг P из RewriteRule, он переписал бы запрос, но тогда мои заголовки не были добавлены, потому что мы не проксировали, что мне нужно сделать.
Это тогда привело меня к пониманию, что прокси-сервер не работал правильно, что сразу же привело к такому решению:
В файле httpd.conf измените
#LoadModule proxy_module modules/mod_proxy.so
в
LoadModule proxy_module modules/mod_proxy.so
TL; DR
Включите mod_proxy, если вы хотите использовать прокси с флагом P в правиле перезаписи