gpt4 book ai didi

redirect - Nginx 重定向到外部 URL

转载 作者:行者123 更新时间:2023-12-04 18:47:29 26 4
gpt4 key购买 nike

我要做的是将所有请求路由到 /rdr/extern_url重定向到 extern_url通过我的网络服务器而不是通过 PHP 来完成。

location /rdr {
rewrite ^/rdr/(.*)$ $1 permanent;
}

如果我访问 http://localhost/rdr/http://google.com,这里出了什么问题我的浏览器告诉我:
Error 310 (net::ERR_TOO_MANY_REDIRECTS): There were too many redirects.

如何正确重定向?

最佳答案

琐碎检查:

$ curl -si 'http://localhost/rdr/http://www.google.com' | head -8
HTTP/1.1 301 Moved Permanently
Server: nginx/1.2.0
Date: Sun, 05 Aug 2012 09:33:14 GMT
Content-Type: text/html
Content-Length: 184
Connection: keep-alive
Location: http:/www.google.com

如您所见, Location 中的方案后面只有一个斜杠。 .

将以下指令添加到 server 后:
merge_slashes off;

我们会得到正确的回复:
$ curl -si 'http://localhost/rdr/http://www.google.com' | head -8
HTTP/1.1 301 Moved Permanently
Server: nginx/1.2.0
Date: Sun, 05 Aug 2012 09:36:56 GMT
Content-Type: text/html
Content-Length: 184
Connection: keep-alive
Location: http://www.google.com

从注释中可以清楚地看出,您可能希望将没有架构的主机名传递给重定向服务。要解决此问题,您需要定义两个位置来分别处理这两种情况:
server {
listen 80;
server_name localhost;
merge_slashes off;

location /rdr {
location /rdr/http:// {
rewrite ^/rdr/(.*)$ $1 permanent;
}
rewrite ^/rdr/(.*)$ http://$1 permanent;
}
}

这里我定义了 /rdr/http://作为 /rdr 的子位置只是为了将重定向器服务保留在一个块中——在 server 处创建两个位置是完全有效的。 -等级。

关于redirect - Nginx 重定向到外部 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11814438/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com