将 RewriteRule 更改为 localhost 会导致重定向相对于 localhost 而不是原始 URL

RewriteRule to localhost results in redirects being relative to localhost rather than original URL

提问人:incarnadine 提问时间:9/29/2023 最后编辑:RavinderSingh13incarnadine 更新时间:10/9/2023 访问量:46

问:

我有一个后端服务器运行正常并绑定到 .127.0.0.1:5000

在我站点的根目录中,我必须将请求重定向到我的服务器。.htaccessRewriteRule "^(.*)$" http://localhost:5000/$1 [P,NE,L,QSA]

如果我访问我的网站的主页,我会被重定向到而不是 .https://example.comlocalhost:5000/loginhttps://example.com/login

我尝试过使用/但由于我只能访问(许多站点在此服务器上运行),因此这些都不起作用。ProxyPassProxyPassReverse.htaccess

有没有办法将最初请求的 URL 传递给我的服务器,以便它正确回复?或者我可以添加一些东西来适当地重写重定向,然后再将它们返回给客户端?.htaccess

apache .htaccess mod-rewrite 反向代理

评论


答:

1赞 anubhava 9/29/2023 #1

您可以使用此规则通过变量代理所有请求:HTTP_HOST

RewriteEngine On

RewriteRule ^ http://%{HTTP_HOST}:5000%{REQUEST_URI} [P,NE,L]

评论

0赞 incarnadine 9/29/2023
这不会将我连接到我的后端服务器。apache 日志显示 where 是 行中返回的地址之一。我尝试将我的后端服务器绑定到 ::1(因为这似乎相当于 127.0.0.1),但得到了相同的结果。[proxy:error] [pid 995198] (111)Connection refused: AH00957: HTTP: attempt to connect to [ipv6addr]:5000 (*) failedipv6addrip addressinet6 ipv6addr scope global deprecated
0赞 anubhava 9/29/2023
所以你试过:?RewriteRule ^ http:///example.com:5000%{REQUEST_URI} [P,NE,L]
0赞 incarnadine 9/29/2023
是的,这不适用于相同的错误。我假设因为我只绑定到 ,所以它不能在外部访问,所以唯一的方法是在内部使用语句或语句中。不幸的是,这台机器不能使用。127.0.0.1:5000localhost127.0.0.1RewriteRule0.0.0.0
0赞 anubhava 9/29/2023
所以你的意思是工作正常?RewriteRule ^ http://localhost:5000%{REQUEST_URI} [P,NE,L]
0赞 incarnadine 9/30/2023
它的工作原理是请求已成功传递到后端,但随后后端尝试将我重定向到并且浏览器中的 URL 更改为显然不起作用(我希望它使用原始 URL 而不是重写的 URL)/loginhttp://localhost:5000/loginhttp://example.com/login