You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Apache服务器的cPanel中实现Next.js应用www转非www的301重定向

问题

我把Next.js应用用独立构建包部署到了cPanel,访问不带www的example.com一切正常,但访问www.example.com时GET请求完不成。当前的.htaccess文件内容如下:

RewriteEngine on
# DO NOT REMOVE. CLOUDLINUX PASSENGER CONFIGURATION BEGIN
PassengerAppRoot "/home/username/public_html/App.Next"
PassengerBaseURI "/"
PassengerNodejs "/home/username/nodevenv/public_html/App.Next/18/bin/node"
PassengerAppType node
PassengerStartupFile /home/username/public_html/App.Next/server.js
PassengerAppLogFile "/home/username/logs/passenger.log"
# DO NOT REMOVE. CLOUDLINUX PASSENGER CONFIGURATION END
# DO NOT REMOVE OR MODIFY. CLOUDLINUX ENV VARS CONFIGURATION BEGIN
<IfModule Litespeed>
</IfModule>
# DO NOT REMOVE OR MODIFY. CLOUDLINUX ENV VARS CONFIGURATION END
RewriteCond %{HTTPS} off
RewriteCond %{HTTP:X-Forwarded-SSL} !on
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^ %{REQUEST_SCHEME}://%1%{REQUEST_URI} [R=301,L]

需要实现http://www.example.com通过301永久重定向到https://example.com,服务器用的是Apache 2.4.57。

解决方案

你当前的重定向规则只处理了非HTTPS的www域名,没覆盖HTTPS场景,而且规则顺序不对,Passenger配置可能会干扰重定向执行。调整后的.htaccess如下:

RewriteEngine on

# 处理所有www域名(HTTP/HTTPS)跳转到https非www域名
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L]

# 处理非www域名的HTTP转HTTPS
RewriteCond %{HTTPS} off
RewriteCond %{HTTP:X-Forwarded-SSL} !on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

# DO NOT REMOVE. CLOUDLINUX PASSENGER CONFIGURATION BEGIN
PassengerAppRoot "/home/username/public_html/App.Next"
PassengerBaseURI "/"
PassengerNodejs "/home/username/nodevenv/public_html/App.Next/18/bin/node"
PassengerAppType node
PassengerStartupFile /home/username/public_html/App.Next/server.js
PassengerAppLogFile "/home/username/logs/passenger.log"
# DO NOT REMOVE. CLOUDLINUX PASSENGER CONFIGURATION END
# DO NOT REMOVE OR MODIFY. CLOUDLINUX ENV VARS CONFIGURATION BEGIN
<IfModule Litespeed>
</IfModule>
# DO NOT REMOVE OR MODIFY. CLOUDLINUX ENV VARS CONFIGURATION END

改动要点:

  • 调整规则顺序:把重定向规则放在Passenger配置前面,让Apache先完成跳转,再把请求交给Next.js应用,避免应用拦截未处理完的请求。
  • 覆盖所有www场景:单独一条规则处理所有www开头的域名,不管是HTTP还是HTTPS,直接跳转到https的非www域名,不用分开写两种情况。
  • 补全HTTP转HTTPS:确保不带www的HTTP请求也能跳转到HTTPS,保证全站都是加密访问。

测试注意事项:

  1. 修改后一定要清空浏览器缓存再测试,301重定向会被浏览器缓存,旧缓存可能导致测试结果不准。
  2. 确认cPanel里已经给www.example.com配置了有效的SSL证书,不然HTTPS访问会弹证书错误。
  3. 检查Apache的mod_rewrite模块是否启用,cPanel环境一般默认是开着的,如果没开要在cPanel里启用。

内容的提问来源于stack exchange,提问作者Hooman Limouee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 20:52:45