装好 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,不需要手配。