我在 nginx 配置中有这个工作代码:
if ($http_host ~* ^www\.(.+)$) {
set $host2 $1;
rewrite (.*) http://$host2$1;
}
我认为该字符串set $host2 $1;
可能会被省略,并且 $1 在 rewrite 语句中使用而不定义一些变量。但是 rewrite 有自己的 $1..$9 参数。
如果在重写语句中,我如何使用 $1 形式?
我在 nginx 配置中有这个工作代码:
if ($http_host ~* ^www\.(.+)$) {
set $host2 $1;
rewrite (.*) http://$host2$1;
}
我认为该字符串set $host2 $1;
可能会被省略,并且 $1 在 rewrite 语句中使用而不定义一些变量。但是 rewrite 有自己的 $1..$9 参数。
如果在重写语句中,我如何使用 $1 形式?
我认为正则表达式美元形式仅适用于最近的正则表达式。所以你不能在不使用的情况下将$1
的if
与 的结合起来。但是,对于您的方案,有更简单的解决方案。$1
rewrite
set
首先,如果您知道主机名(例如example.com
),您可以执行以下操作:
server {
server_name www.example.com;
return 301 $scheme://example.com$request_uri;
}
server { server_name example.com; ... }
另一方面,如果您没有记住特定的主机名,则可以执行以下包罗万象的解决方案:
server {
server_name ~^www\.(?<domain>.+)$;
return 301 $scheme://$domain$request_uri;
}
server { server_name _; ... }
您可以在此处找到有关第二种形式的更多信息。
我不推荐包罗万象的解决方案,因为最多只有一个包罗万象的服务器块才有意义。如果可能,请使用命名服务器解决方案。
rewrite ^ destination permanent;
另外,请注意,您可以使用表单实现上述重定向。所有这些解决方案都避免使用不受欢迎的if
指令。