小皮面板设置301重定向不生效如何排查
学完这篇,你能按顺序定位小皮面板里 301 重定向不生效的真正原因——是请求根本没走到面板这一层,还是规则写错、配置文件改错、缓存没清,并把它改对。
第一步:先确认「到底有没有返回 301」
这一步的目的是拿到客观结论,别靠浏览器肉眼判断。打开命令行,执行:
curl -I http://old.example.com
curl -I -L -o /dev/null -w "%{http_code} %{url_effective}\n" http://old.example.com
第一条看响应头,正常应该有 HTTP/1.1 301 Moved Permanently 和 Location: https://new.example.com/...。第二条跟完整条跳转链,最后打印出的状态码和目标地址就是最终结果。
注意:301 是永久重定向,Chrome、Edge 会把它永久缓存,按 Ctrl+F5 也清不掉。测试必须用无痕窗口,或者到「设置 → 隐私和安全 → 清除浏览数据」里勾选「缓存的图片和文件」再清。
第二步:确认站点跑的是 Nginx 还是 Apache
小皮面板可以同时装 Nginx 和 Apache,你在 A 里改规则、站点实际跑在 B 上,当然不生效。Linux 版小皮面板:登录面板 → 左侧「网站」→ 看站点列表里的「运行环境」列,写着 Nginx 或 Apache。Windows 版 phpStudy:主界面「网站」标签页,站点列表右侧「环境」列直接显示。
第三步:检查你改的是不是站点真正加载的那份配置
这一步要拿到站点实际生效的配置文件路径。Linux 小皮面板(xp.cn 面板)的站点配置在:
- Nginx:
/www/server/panel/vhost/nginx/你的域名.conf - Apache:
/www/server/panel/vhost/apache/你的域名.conf
Windows 版 phpStudy 在安装目录下,例如:
D:\phpstudy_pro\Extensions\Nginx1.15.11\conf\vhosts\你的域名.confD:\phpstudy_pro\Extensions\Apache2.4.39\conf\vhosts\你的域名.conf
(版本号随安装包不同,以你目录里实际存在的为准。)打开这份文件,确认里面确实有你写的 301 规则。
注意:小皮面板的「重定向」功能会把规则写进这个 vhost 文件。如果你后来又在面板里点了「保存」或「修改网站」,面板可能按模板重新生成整个文件,把你手写进去的规则覆盖掉。手改配置后,别再用面板的重定向界面重复保存。
第四步:看是不是伪静态或其他规则抢先匹配
Nginx 里 location 的匹配有优先级,伪静态规则(try_files、rewrite)如果写在前面,可能先把请求吃掉了。Apache 同理,.htaccess 里的 RewriteRule 顺序是从上到下,第一条命中就停。
把 301 规则放在配置块最前面测试一次。Nginx 最省事的写法是:
server {
listen 80;
server_name old.example.com;
return 301 https://new.example.com$request_uri;
}
用 return 而不是 rewrite,因为它优先级最高,不受 location 干扰。
第五步:排查上层 CDN、DNS 和强制 HTTPS
如果域名解析指向了 CDN(阿里云 CDN、腾讯云 EdgeOne、Cloudflare 等),请求可能压根没回源。再跑一次:
curl -I https://old.example.com
看响应头里有没有 Server: cloudflare、X-Cache、Via 这类字段。有的话,去 CDN 控制台检查是否也配了一条重定向规则,或者缓存了旧的 301 响应,在 CDN 里做一次「刷新缓存 / 刷新 URL」。
另外小皮面板的「SSL → 强制 HTTPS」本身就会生成一条跳转,它和你手写的 301 同时存在时会互相打架,先确认清楚你要的是哪一条。
第六步:改完配置必须重载,不能只看文件
文件改对了但进程没重新加载,一样不生效。Linux 小皮面板:面板 → 左侧「软件商店」→ 找到 Nginx → 点「重载配置」。命令行也可以:
/etc/init.d/nginx reload
Windows phpStudy:主界面「网站」→ 站点右侧「管理」里有重载/重启选项,或者直接在主界面停止 Nginx 再启动。
第七步:核对规则写法本身
常见写错的地方:目标地址结尾漏了 $request_uri 导致参数丢失;server_name 写成了带 www 的域名但你访问的是不带 www 的;Apache 的 .htaccess 里没写 RewriteEngine On;把 301 写成了 302 然后以为是浏览器缓存问题。
小结
- 先用
curl -I拿状态码和 Location,别用浏览器肉眼判断。 - 301 会被浏览器永久缓存,测试一律用无痕窗口。
- 确认站点跑的是 Nginx 还是 Apache,改对对应的 vhost 配置文件。
- 手改配置后不要再回面板点保存,避免被模板覆盖。
- 检查伪静态、CDN、强制 HTTPS 是否抢在前面。
- 改完必须重载 Nginx/Apache,最后再核对规则写法。
原文链接:https://www.gj0.com/thread-1182.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。