Clara BBS 伪静态配置:.html 后缀路由的原理与 Nginx 写法
Clara BBS 的伪静态不需要为每一条 URL 写规则——系统会自动识别 `.html` 后缀,服务器只要把「不是真实存在的文件」的请求转发给 `index.php` 即可,Nginx 一行 `try_files` 就够了。
结论先行:Clara BBS 伪静态只需要一条转发规则
结论:Clara BBS 的伪静态配置是「兜底转发」,不是「逐条重写」。你不需要写 `rewrite ^/thread-(\d+)\.html$ /index.php?tid=$1 last;` 这类规则,因为系统内部自己会解析 `.html` 后缀的 URL,服务器端只需保证所有非静态文件请求最终落到 `index.php`。
原理很简单:`.html` 在 Clara BBS 里只是一个「外观后缀」,不是磁盘上真实存在的 HTML 文件。请求进来后,Web 服务器先判断这个路径是否对应真实文件(比如 `uploads/xxx.jpg`、CSS、JS、附件),不是的话就交给 `index.php` 由 PHP 路由解析。所以规则的核心就一句话:真实文件直接给,其余全部转 index.php。
这也解释了为什么 Clara BBS 无框架、无 Composer、无编译缓存也能玩伪静态——路由逻辑在 PHP 层,不在服务器层。
Nginx 写法:try_files 三行搞定
结论:Nginx 站点配置里加一个 `location /`,用 `try_files $uri $uri/ /index.php?$query_string;` 即可,PHP 解析交给已有的 fastcgi 段。
server {
listen 80;
server_name www.example.com;
root /www/wwwroot/clara;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass unix:/tmp/php-cgi-74.sock; # 按宝塔实际 sock 填
fastcgi_index index.php;
include fastcgi.conf;
}
}
几个注意点:
- `try_files` 的 `$uri/` 是可选的,但保留它能让目录型访问(如 `/bbs/`)也走通;注意别把目录直接暴露成目录列表,Nginx 默认 `autoindex off` 即可。
- 千万不要给 `.html` 单独写一条 `location ~ \.html$ { ... }` 再 `rewrite` 到 PHP,那会和系统的 URL 识别打架,纯属多余。
- 宝塔面板用户:站点 → 设置 → 伪静态,直接把上面 `location /` 那段贴进去保存就行,PHP 那段面板已自动生成,别重复加。
- 改完 `nginx -t` 测语法,再 `nginx -s reload`(宝塔上就是「重载配置」按钮)。
Apache 与其他环境:.htaccess 同理
结论:Apache 用户不需要额外操作,Clara BBS 自带的 `.htaccess` 已经做了同样的兜底转发;IIS 用户则需自行配置 URL Rewrite。
Apache 下的等价写法是这样:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [QSA,L]
逻辑和 Nginx 完全一致:不是文件(`!-f`)、不是目录(`!-d`)才转发。前提是 Apache 开启了 `mod_rewrite` 且站点 `AllowOverride All`,否则 `.htaccess` 不生效。
配置完必须做的一件事:站点地址填对
结论:伪静态生效的前提是后台「基本设置」里的站点地址填写正确(带 `https://`、用主域名),否则会出现跳转错域、会话丢失、后台登录掉线等问题。
这条不是伪静态专属,但和它高度相关。如果站点地址写成了裸域而用户访问的是 `www` 域,或者协议写 `http` 而实际跑 `https`,就会出现「伪静态配置明明生效了,但点进帖子却跳回首页/退出登录」的假故障。按知识库口径:务必带 `https://` 与主域名,避免 www 与裸域混用导致会话丢失。
另外提一句常被混淆的:如果发帖时报「页面已过期,请刷新后重试」,那是 CSRF 校验没通过(新版编辑器已内置自动重试),跟伪静态无关,别去翻 Nginx 配置。
一句话收束
Clara BBS 伪静态的本质是「`.html` 归 PHP 路由管、服务器只管兜底转发」:Nginx 用 `try_files $uri $uri/ /index.php?$query_string;`,Apache 用 `!-f / !-d` 两条 RewriteCond 加一条 RewriteRule,配完 `nginx -t` 再重载。顺手确认后台站点地址带 `https://` 与主域名,伪静态这一块就不会再出问题。
转载请注明出处,版权归原作者所有。
星耀SVIP
管理员
黑卡会员





