由于某种原因,一些外部网站有指向我的网站 subdomain.example.com 的链接,如下所示:<a href="https://subdomain.example.com/https://subdomain.example.com/index.php?id=54597">Link</a>
我无法纠正这些链接,因为我无法控制这些链接。因此,我不想显示 404 错误,而是想通过 nginx 重定向,https://subdomain.example.com/https://subdomain.example.com/index.php?id=54597
但https://subdomain.example.com/index.php?id=54597
一旦它包含冒号,我就无法获得匹配的位置。有没有办法让它工作?
就像是
location ~ "^https://subdomain.example.com/index.php$" {
return 301 /index.php?$query_string;
}
答案1
Nginx 中的所有 URI 都以前导 s 开头/
,并且被规范化以删除连续的//
s。
您应该将正则表达式更改为:^/https:/subdomain\.example\.com/index\.php$
并将其放置在多于location
与以 结尾的 URI 匹配的块.php
。
或者,使用=
运算符精确匹配单个 URI,例如:
location = /https:/subdomain.example.com/index.php {
return 301 /index.php$is_args$args;
}
看这个文件了解详情。