论坛伪静态怎么配置?Nginx 与 Apache 两种写法
结论:Clara BBS 配伪静态根本不用为每个版块、每个帖子写一堆 RewriteRule——它自动识别 `.html` 后缀的 URL,服务器端只需要把「不存在的文件或目录」请求统一兜底交给 `index.php` 就行,Nginx 用一行 `try_files`,Apache 用一个 `.htaccess`,改完立即生效。
为什么这个系统"无需额外规则"
Clara BBS 是单入口架构,URL 长什么样、`.html` 后缀怎么解析,全部在 PHP 内部完成,服务器不参与路由判断。这意味着两件事:一是规则极少,写一次全局兜底就永久有效;二是以后新增版块、新增子分类都不用回头改配置,不会出现"新开的版块打不开"这种典型传统论坛的坑。
所以配置思路只有一句话:**真实存在的文件(图片、CSS、JS、附件、uploads 目录)照常直接返回,其余请求统统交给 `index.php`。** `try_files` 的匹配顺序天然满足这一点,这也是它比一堆 `location ~ \.html$` 更稳的原因。
Nginx 写法
在站点配置的 `server { }` 里,给根路径加一行 `try_files` 即可,其余保持面板生成的原样。
server {
listen 80;
server_name bbs.example.com;
root /www/wwwroot/bbs;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
# 下面的 PHP 段保留宝塔/面板自动生成的即可,不要手改 socket 名
location ~ \.php$ {
fastcgi_pass unix:/tmp/php-cgi-74.sock;
fastcgi_index index.php;
include fastcgi.conf;
}
}
注意点有三个。第一,`?$query_string` 不能省,搜索、分页、筛选这类带参数的 URL 靠它透传,省掉会出现翻页只回首页。第二,`location ~ \.php$` 这一段宝塔面板本来就会生成,`fastcgi_pass` 的 socket 名字跟 PHP 版本绑定,手改容易 502,只动 `location /` 最安全。第三,改完执行一次 `nginx -t` 再 reload,别直接重启,配置写错会导致整个站挂掉。
Apache 写法
Apache 走 `.htaccess`。确认 `mod_rewrite` 已启用、站点目录的 `AllowOverride` 为 `All`(宝塔里是"网站→设置→伪静态"之外的目录权限项,VPS 手装则在 `httpd.conf` 里改),然后把下面这段放到站点根目录:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [L,QSA]
</IfModule>
两个条件行的含义就是"请求的不是真实文件、也不是真实目录"才转发,所以 uploads 里的图片不会被吞掉。如果论坛装在二级目录(比如 `/bbs`),把 `RewriteBase /` 改成 `RewriteBase /bbs/`,否则会转发到站外路径去。
配完怎么验证、以及几个常见坑
验证方法很直接:随便打开一个帖子或版块的 `.html` 链接,能正常显示就说明转发通了;返回 404 基本就是规则没生效(Nginx 忘 reload、Apache 的 `AllowOverride` 没开)或者根目录 `root` 指错了位置。
几个最容易踩的点。一是后台「基本设置」里的站点地址必须填对,带上 `https://` 和主域名,`www` 与裸域混用会导致会话丢失,这时候表现出来的症状很像伪静态坏了,其实是 Cookie 域不对。二是图片、样式全丢,通常是规则写成了无条件转发,检查一下 `try_files` 或 `RewriteCond` 的"真实文件优先"有没有被删掉。三是发帖提示"页面已过期,请刷新后重试",这跟伪静态无关,那是 CSRF 校验没过,刷新页面即可,新版编辑器还内置了自动重试。
收一下:Clara BBS 的伪静态成本极低——Nginx 一行 `try_files $uri $uri/ /index.php?$query_string`,Apache 一段带 `!-f !-d` 条件的 `RewriteRule`,全局生效、无需随版块增减维护。真正要盯的只有站点地址写没写对、PHP 段有没有误改、改完有没有 reload 这三件事。
转载请注明出处,版权归原作者所有。
星耀SVIP
管理员
黑卡会员





