宝塔面板 rewrite 规则怎么写
学完这篇,你能在宝塔面板里独立写出 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。这两条缺一个,规则写了也白写。
小结
- 先分清 Nginx 还是 Apache,两者语法完全不通用。
- Nginx 规则写在「网站 → 设置 → 伪静态」,只写
server{}内部的指令。 rewrite 正则 目标 标志,last/break用于内部重写,redirect/permanent用于跳转。- 调试用 302,稳定后再换 301,避开浏览器缓存。
- 出错看
/www/wwwlogs/站点.error.log,Apache 还要检查AllowOverride All。
原文链接:https://www.gj0.com/thread-701.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。