1

Я настраиваю локальную среду для тестирования с использованием WAMP.

Приложение (угловое приложение) находится в каталоге /wamp /www /app /. Он отправляет запросы другому API, отправляя запросы другому маршруту на том же сервере. (Специально для /wamp /www /api /route)

У нас есть сервер dev api, который существует на http://api.com. У нас есть еще один тестовый экземпляр углового приложения по адресу http://testapp.com/app/, который может отправлять запросы на http://api.com , указывая на http://testapp.com/api/route.

Способ, которым это работает в тестовом экземпляре (не локальном), заключается в том, что у нас есть файл .htaccess по адресу http://testapp.com/api/route, который принимает запросы на http://testapp.com/api/route/ * и отправляет их на http://api.com/ *

Файл .htaccess, который делает это, выглядит следующим образом:

<IfModule mod_rewrite.c>
    RewriteRule (.*) http://api.com/$1 [NC,P]
</IfModule>

Когда я копирую этот файл .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 следующим образом:

<Directory "c:/wamp64/www/api/route">
    Options  +FollowSymLinks
    RewriteEngine on
    <IfModule mod_rewrite.c>
        RewriteRule (.*) http://api.com/$1 [NC,P]
    </IfModule>
</Directory>

И я все еще получаю такое же поведение

1 ответ1

1

Благодаря Purefan, с включенным журналом перезаписи я увидел, что перезапись пыталась переписать, но затем запрос так и не был отправлен.

Когда я удалил флаг P из RewriteRule, он переписал бы запрос, но тогда мои заголовки не были добавлены, потому что мы не проксировали, что мне нужно сделать.

Это тогда привело меня к пониманию, что прокси-сервер не работал правильно, что сразу же привело к такому решению:

В файле httpd.conf измените

#LoadModule proxy_module modules/mod_proxy.so

в

LoadModule proxy_module modules/mod_proxy.so

TL; DR

Включите mod_proxy, если вы хотите использовать прокси с флагом P в правиле перезаписи

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .