⭐ 推荐:社区规则条款 V1.0

Clara BBS 伪静态配置:.html 后缀路由的原理与 Nginx 写法

CLARA轻量论坛系统
CLARA轻量论坛系统 星耀SVIP星耀SVIP管理员管理员 黑卡会员黑卡会员
发布于 2026-07-26 10:49 ·136 浏览 ·0 回复

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:// 与主域名,伪静态这一块就不会再出问题。

本文转载自 Clara轻量论坛系统,原文地址:https://www.leleweb.cn/thread-451.html
转载请注明出处,版权归原作者所有。

全部回复 0

还没有回复,来抢沙发~