装好 KingCMS 后首页能打开、点进内页却是 404,或者栏目、文章改过地址后旧链接打不开——这两类问题通常都出在「伪静态」和「301 重定向」上。这篇文档说明原因、服务器怎么配、后台怎么切,以及旧地址为什么能自动跳转。

地址不是真实目录

前台地址(例如 /news/hello-world)只是访问路径,服务器磁盘上并没有这个目录。除了真实存在的文件(/assets/ 下的样式和脚本、图片等),其他请求都要交给 x1/public/index.php,由程序按 slug 查找栏目、单页、文章或产品。因此站点根目录必须指向 x1/public/,不能指向仓库根目录或 x1/。

nginx 配置

在站点的 server 块里加两段:try_files 把不存在的路径交给 index.php,location 把 PHP 请求交给 php-fpm。

server {
    listen 80;
    server_name cms.example.com;
    root /var/www/kingcms/x1/public;
    index index.php;
    location / { try_files $uri $uri/ /index.php?$query_string; }
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.4-fpm.sock;
    }
}

php-fpm 套接字路径按服务器实际 PHP 版本调整。改完先 nginx -t 检查语法,再 reload。

Apache 配置

需要开启 mod_rewrite(a2enmod rewrite),并允许站点目录读取 .htaccess(AllowOverride All)。public/ 目录已带有 .htaccess,它只把不存在的文件和目录转给 index.php,并保留查询串:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [QSA,L]

后台「网址形式」

后台「设置 → 基本信息」里有「网址形式」:伪静态是 /栏目/文章,需要先配好服务器;兼容是 /?栏目/文章&page=2,不需要服务器配置。切到伪静态并保存时,程序会先访问本站 /healthz 检测重写是否生效,检测不通过就保存失败、保持原值——所以要先配服务器,再切开关。

旧地址的 301 重定向

栏目或文章改过地址后,程序会自动为旧地址保留 301 跳转到新地址,不需要手动写规则。如果旧链接仍然 404,先确认它是不是由改名产生的;不是的话,检查服务器重写是否生效。

常见问题

  • 首页正常、内页 404:nginx 检查 try_files 是否指向 /index.php;Apache 检查 mod_rewrite 和 AllowOverride。
  • 首页也 404:检查站点根是否指向 x1/public/,index.php 是否存在。
  • 图片打不开:图片在 x1/data/uploads/,不在站点根内;nginx 要配 /media/ 别名,并禁止该目录执行 PHP。
  • 改地址后旧链接 404:确认旧地址确实由改名产生;程序会自动 301,不需要手配。

安装和环境准备见安装与环境,升级见在线升级。