长URL不同域重定向Nginx问题

ffscu2ro  于 2022-11-02  发布在  Nginx
关注(0)|答案(1)|浏览(280)

在Nginx中重定向两个长域URL的最佳方式是什么,我想在两个域之间配置一个重定向,如下所示:
我肯定以前有人问过这个问题,但我找不到一个有效的解决方案。
原始链接:
https://qwerty.test.com/education/7/abc-science
新建链接
https://www.test.com/education/7/abc-science
我们正在使用alb进行http到https
我已经试过了:

server {
    listen 80;
    listen 443 ssl;
    server_name qwerty.test.com/education/7/abc-scienc;
    return 301 $scheme://www.test.com/education/7/abc-science$request_uri;
}

我得到的输出

curl -I qwerty.test.com/education/7/abc-scienc  
    HTTP/1.1 301 Moved Permanently
    Location: https://qwerty.test.com/education/7/abc-scienc

仍然收到一些错误

nginx: [warn] server name "education/7/abc-scienc
" has suspicious symbols in /etc/nginx/conf.d/redirect.conf:9

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

我是否需要使用此方式将旧URL重定向到新URL?

location = /content/unique-page-name {
  return 301 /new-name/unique-page-name;
}

有谁能帮我一下吗?这是怎么了?
任何帮助都是感激不尽的!谢谢!

ie3xauqp

ie3xauqp1#

这实际上是正确的工作。Nginx返回的是301 Moved Permanently,这正是你想要的。如果你想让curl跟随重定向,你需要添加-L,例如:

curl -L qwerty.test.com/education/7/abc-scienc

来自curl文档的说明:
-L,--location(HTTP/HTTPS)如果服务器报告所请求的页面已移动到其他位置(以Location:header和一个3XX响应代码),这个选项将使curl在新的位置重做请求。如果与-i,--include或-I,--head一起使用,将显示所有请求页面的头。当使用身份验证时,curl只将其证书发送到初始主机。如果重定向将curl重定向到不同的主机,它将无法截获用户名和密码。关于如何更改这一点,请参见--location-trusted。您可以使用--max-redirs选项来限制要跟随的重定向数量。
当curl跟随重定向并且请求不是普通的GET(例如POST或PUT)时,如果HTTP响应是301、302或303,它将使用GET执行以下请求。如果响应代码是任何其他3xx代码,curl将使用相同的未修改方法重新发送以下请求。

相关问题