Nginx配置Certbot SSL后www转非www时部分页面提示URL未找到问题
我来帮你搞定这个问题!你遇到的核心问题是没有针对www.desijewel.in的HTTPS请求配置对应的处理规则,导致带路径的HTTPS请求到www域名时,Nginx找不到匹配的server块,直接返回404。下面是具体的修复方案:
第一步:确保SSL证书包含www域名
如果之前只给主域名desijewel.in申请了证书,先运行以下命令更新证书,让它同时覆盖www.desijewel.in:
certbot --nginx -d desijewel.in -d www.desijewel.in
这个命令会自动生成包含两个域名的SSL证书,同时帮你更新基础的Nginx配置,之后我们再手动调整重定向逻辑。
第二步:替换为正确的Nginx配置
把你的Nginx配置替换成以下内容,每个部分都做了针对性处理:
# 主域名HTTPS处理:负责响应所有https://desijewel.in的请求(含路径) server { root /home/anjaan/dsjwl/backend/public; gzip on; gzip_types text/plain application/xml text/css application/javascript; gzip_min_length 1000; index index.php index.html index.htm index.nginx-debian.html; server_name desijewel.in; # 保留你原来的其他配置(比如PHP解析规则、路由规则等) listen 443 ssl; # managed by Certbot ssl_certificate /etc/letsencrypt/live/desijewel.in/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/desijewel.in/privkey.pem; # managed by Certbot include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot } # www域名HTTPS重定向:专门处理所有https://www.desijewel.in的请求(含路径) server { server_name www.desijewel.in; listen 443 ssl; # managed by Certbot ssl_certificate /etc/letsencrypt/live/desijewel.in/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/desijewel.in/privkey.pem; # managed by Certbot include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot # 核心:重定向时带上$request_uri,完整保留原请求的路径参数 return 301 https://desijewel.in$request_uri; } # 统一处理HTTP请求:把所有http://的请求(主域名+www)重定向到HTTPS主域名 server { listen 80; server_name desijewel.in www.desijewel.in; return 301 https://desijewel.in$request_uri; }
关键逻辑说明
- 第二个server块是解决问题的核心:它专门匹配
www.desijewel.in的HTTPS请求,通过$request_uri变量完整保留原路径(比如/article),再重定向到主域名,避免了路径丢失导致的404。 - 第三个server块简化了HTTP重定向逻辑,不管用户访问的是
http://desijewel.in还是http://www.desijewel.in,都会直接跳转到HTTPS主域名,不需要分散配置。
最后一步:验证配置并重启Nginx
修改完配置后,先检查语法是否正确:
nginx -t
如果输出test is successful,就可以重启Nginx生效:
systemctl restart nginx
现在再访问https://www.desijewel.in/article,就会正确跳转到https://desijewel.in/article,不会再出现404错误了。
内容的提问来源于stack exchange,提问作者mukeshsoni
相关产品推荐
相关产品推荐

