nginx - 哪种方式更好地重定向以及为什么

Chr*_*tis 4 nginx redirect regular-expressions 301-redirect

我想从 www.mydomain.com 重定向到 nginx 中的 domain.com。我在网上搜索,找到了两种方法:

第一种方式

server {
            listen   80;
            server_name  www.domain.com;
            rewrite ^/(.*) http://domain.com/$1 permanent;
}
Run Code Online (Sandbox Code Playgroud)

第二种方式

server {
            listen   80;
            server_name  www.domain.com;
            return 301 $scheme://domain.com$request_uri;
}
Run Code Online (Sandbox Code Playgroud)

两种方式都有效。但是我应该使用哪一个,为什么?

Pot*_*thu 6

第二种方法更好...

server {
  listen   80;
  server_name  www.domain.com;
  return 301 $scheme://domain.com$request_uri;
}
Run Code Online (Sandbox Code Playgroud)

为什么

让我直接引用来自官方 Nginx wiki 的陷阱和常见错误

通过使用内置变量 $request_uri,我们可以有效地避免进行任何捕获或匹配,并且通过使用 return 指令,我们可以完全避免对正则表达式的评估。

我个人的想法...

默认情况下,正则表达式代价高昂并且会降低性能。