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