应使用 return 301 更稳妥;若必须用 rewrite,则在 server 块中通过 if 判断 $host = 'www.example.com',再 rewrite ^/(.*)$ http://example.com/$1 permanent,确保 DNS 和 SSL 证书同时覆盖裸域与 www 域。

直接用 return 更稳妥,但若明确要用 rewrite 实现“带 www 跳转到不带 www 的主域”,关键在于匹配 www. 开头的 host,并重写为裸域地址。
确认主域名方向
先明确你的主域名是 example.com(裸域)还是 www.example.com。本场景指前者——即所有 www.example.com 流量需 301 跳转至 example.com。这和常见“裸域跳 www”相反,但逻辑一致,仅条件取反。
- 检查 SSL 证书是否覆盖裸域(
example.com),否则 HTTPS 跳转会失败 - 确保 DNS 中
www.example.com和example.com都已解析到同一台服务器 IP - 若使用 Let’s Encrypt,推荐签发
*.example.com或同时包含两个域名的证书
Nginx rewrite 配置写法
在对应 server 块中,用 if 判断 host 是否以 www. 开头,再用 rewrite 拼出裸域 URL:
server {
listen 80;
server_name www.example.com example.com;
<pre class="brush:php;toolbar:false;">if ($host = 'www.example.com') {
rewrite ^/(.*)$ http://example.com/$1 permanent;
}}
说明:
在无 root/sudo 权限的环境(云容器、VPS、隔离主机)中安装并配置 OpenClaw 浏览器工具的 headless Chrome。适用场景:...
-
$host = 'www.example.com'是精确匹配,比正则更安全,避免误判 -
^/(.*)$捕获路径部分(不含域名和参数),$1还原原始路径 -
permanent等价于301,表示永久重定向 - 注意:HTTPS 场景请把
http://改为https://,并确保该 server 监听 443 端口且有有效证书
HTTPS 下的完整写法(推荐)
实际生产环境应同时处理 HTTP 和 HTTPS 跳转。建议拆成两个 server 块,语义清晰、不易出错:
# HTTP 全部跳 HTTPS + 裸域
server {
listen 80;
server_name www.example.com example.com;
return 301 https://example.com$request_uri;
}
<h1>HTTPS 主服务(只响应裸域)</h1><p>server {
listen 443 ssl;
server_name example.com;
ssl_certificate /path/to/fullchain.pem;
ssl_certificate_key /path/to/privkey.pem;</p><h1>其他配置...</h1><p>}</p>
这样既避开 if + rewrite 在 HTTPS 中的潜在问题,又利用 return 的高效与可靠性。
验证与排错要点
配置后务必验证,避免循环跳转或 500 错误:
- 用
curl -I http://www.example.com查看响应头是否含Location: https://example.com/和301 - 测试带参数的 URL,如
http://www.example.com/path?a=1&b=2,确认$request_uri完整保留 - 不要在
location块内写针对 host 的if,Nginx 官方不推荐,易引发不可预期行为 - 修改后执行
nginx -t检查语法,再nginx -s reload生效










