宝塔面板 rewrite 规则怎么写

域名注册
域名注册 正式会员超兽战士 👑年卡会员
发布于 2026-10-08 02:45 ·1 浏览 ·0 回复

学完这篇,你能在宝塔面板里独立写出 Nginx 和 Apache 两种伪静态(rewrite)规则,并知道改完去哪儿验证、出错去哪儿看日志。

第一步:确认站点跑的是 Nginx 还是 Apache

这一步是为了避免"抄了 Nginx 规则填进 Apache 站点"这种最常见的翻车。登录宝塔面板,左侧点「网站」,找到你的站点,点右侧「设置」,弹窗里有「配置文件」标签:如果文件名是 你的域名.conf,基本就是 Nginx;Apache 站点的网站根目录下会多出一个 .htaccess 文件。也可以直接去「软件商店」→「已安装」看装的是哪个 Web 服务器(Nginx 1.2x 或 Apache 2.4)。

第二步:找到写规则的位置

Nginx 站点:网站 → 站点 → 设置 → 「伪静态」标签,在文本框里写规则,点「保存」。

Apache 站点:同一个「伪静态」标签,但里面写的是 .htaccess 语法,保存后宝塔会把内容写进网站根目录的 .htaccess。

注意:宝塔的伪静态文本框内容是被插进站点配置的 server { } 块内部的,所以你只写块里面的指令,不要再写 server {、http { 这种大括号,否则保存直接报语法错误。

第三步:搞懂 Nginx rewrite 的基本句式

一条规则就三部分:rewrite 匹配用的正则 替换成什么 标志;

例如 rewrite ^/old/(.*)$ /new/$1 permanent;,意思是把 /old/xxx 永久跳到 /new/xxx。(.*) 是捕获组,$1 引用它。常用标志有四个:last(重写后重新匹配 location)、break(重写后就地停止)、redirect(302 临时跳转)、permanent(301 永久跳转)。

第四步:几种高频规则直接抄

WordPress 固定链接

location / {
    try_files $uri $uri/ /index.php?$args;
}

ThinkPHP / Laravel 隐藏 index.php

location / {
    if (!-e $request_filename) {
        rewrite ^(.*)$ /index.php?s=$1 last;
    }
}

全站强制 HTTPS

if ($scheme = http) {
    return 301 https://$host$request_uri;
}

旧域名 301 到新域名

if ($host = old.com) {
    rewrite ^/(.*)$ https://new.com/$1 permanent;
}

宝塔伪静态面板里已经内置了 WordPress、ThinkPHP、Discuz、帝国 CMS 等模板,下拉框选一下就能生成,改起来比从零写快。

第五步:保存后在哪儿验证

保存时宝塔会对 Nginx 做语法检查,报错就说明正则或大括号有问题。保存成功后,用浏览器无痕窗口访问,或命令行 curl -I https://你的域名/旧地址 看返回码是不是 301/302。如果整站 500 或面板提示 Nginx 启动失败,去「网站 → 站点 → 日志」,或看 /www/wwwlogs/你的域名.error.log,里面有具体行号。

注意:浏览器会缓存 301,调试阶段建议先用 redirect(302),确认无误再换成 permanent(301),否则改错了本地一直跳回老地址,清缓存很麻烦。

第六步:Apache 站点的写法不一样

Apache 用 RewriteEngine On + RewriteRule,规则写在 .htaccess 里:

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^old\.com$ [NC]
RewriteRule ^(.*)$ https://new.com/$1 [R=301,L]

RewriteCond 是条件,[NC] 表示忽略大小写,[R=301,L] 是 301 并停止后续规则。

注意:Apache 的 .htaccess 要生效,必须在「软件商店 → Apache → 设置 → 配置修改」里确认 rewrite_module 已加载,并且站点目录的 AllowOverride 是 All。这两条缺一个,规则写了也白写。

小结

  1. 先分清 Nginx 还是 Apache,两者语法完全不通用。
  2. Nginx 规则写在「网站 → 设置 → 伪静态」,只写 server{} 内部的指令。
  3. rewrite 正则 目标 标志,last/break 用于内部重写,redirect/permanent 用于跳转。
  4. 调试用 302,稳定后再换 301,避开浏览器缓存。
  5. 出错看 /www/wwwlogs/站点.error.log,Apache 还要检查 AllowOverride All。
版权声明:本文来自 GJ站长论坛《宝塔面板 rewrite 规则怎么写》
原文链接:https://www.gj0.com/thread-701.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。

全部回复 0

还没有回复,来抢沙发~