如何将对本地主机路由的请求代理到非本地 URL

如何将对本地主机路由的请求代理到非本地 URL

我正在使用 WAMP 设置本地环境以进行测试。

该应用程序(Angular 应用程序)位于 /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/ 发送请求,/route/ 中的 .htaccess 文件接收该请求,并将其代理到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

感谢 Purefan,启用重写日志后,我看到重写正在尝试重写,但请求从未发送。

当我从 RewriteRule 中删除 P 标志时,它会重写请求,但我的标头不会被添加,因为我们没有代理,而这是我需要做的。

这让我意识到代理无法正常工作,并立即想到了这个解决方案:

在 httpd.conf 文件中,更改

#LoadModule proxy_module modules/mod_proxy.so

LoadModule proxy_module modules/mod_proxy.so

总结

如果要在重写规则中使用 P 标志进行代理,请启用 mod_proxy

相关内容