为什么 rewrite(nginx) 使用 301 代码重定向?

为什么 rewrite(nginx) 使用 301 代码重定向?

我有这样的配置:

location ~ ^/myway(.*) {
    rewrite ^/myway(.*)$ /anotherway$1;
    rewrite_log on;
    error_log /var/log/nginx/errors notice;
}

location /anotherway {
    ...
    internal;
}

url:site.com/myway/工作正常(重写为site.com/anotherway/)。但是 url:site.com/myway重定向到site.com/anotherway/。为什么?它会给出 404 错误吗?

答案1

您可以更改(.*)(.+)

.*匹配任意字符(换行符除外)量词:* 零次至无限次之间,尽可能多次,根据需要返回 [贪婪]

.+匹配任意字符(换行符除外)量词:+ 一次到无限次之间,尽可能多次,根据需要返回 [贪婪]

这意味着:

  • /myway(.*)匹配 /myway(...) & /myway/(...)
  • /myway(.+)仅匹配 /myway/(...)

如果指定的正则表达式与请求 URI 匹配,则 URI 将按照替换字符串中指定的方式进行更改。重写指令将按照其在配置文件中出现的顺序依次执行。可以使用标志终止对指令的进一步处理。如果替换字符串以“http://”或“https://”开头,则处理将停止并将重定向返回给客户端。

有关 Nginx 重写的更多信息:http://nginx.org/en/docs/http/ngx_http_rewrite_module.html#rewrite

顺便说一下,您可以在这里测试正则表达式:https://regex101.com/

答案2

试试这个 - 我加了几个斜线。不能 100% 确定它是否有效,但值得一试。

location ~ ^/myway/(.*) {
  rewrite ^/myway/(.*)$ /anotherway$1;
  rewrite_log on;
  error_log /var/log/nginx/errors notice;
}

它也可能与配置文件中某处的 try_files 相关。

相关内容