Typecho伪静态404通常是固定链接和重写规则对不上

来源:互联网 时间:2026-10-24

换完服务器,首页打开正常,后台也能登录,点任意一篇文章都是404。静态资源、图片都在,说明站点和数据库都活着,问题只出在地址到内容这一段映射上。这类情况通常是伪静态没生效,或者固定链接的格式和重写规则对不上;也有反过来的一面,规则写得太宽,把后台也一起重写了,那时前台能开、后台进不去。两者看着像一件事,其实是两层,一层在程序里,一层在服务器上;分不清就改,改多久都不会通。

后台设置里的地址重写有没有启用,启用的是哪一种格式,文章、独立页面、分类这三条路径各是什么格式;再确认服务器那边的重写规则有没有加载,Apache看mod_rewrite和AllowOverride,Nginx看规则有没有写进对应的location。关掉地址重写,链接会退回带/index.php/的形式,反而打得开,所以文章页404,多半是这里开着、服务器那头没接住。

Nginx上是两种常见写法,按你的location结构和固定链接格式选,两种在常见结构下都能用,没有唯一解。一种是try_files $uri $uri/ /index.php?$query_string,把找不到的请求交给入口文件;另一种是if (!-e $request_filename) { rewrite ^(.*)$ /index.php$1 last; }。前一种更贴近Nginx的习惯用法,后者在一些老教程里更常见。Typecho的规则和WordPress不一样,照抄WordPress那套,路径参数会对不上,前台还是404。

Apache这边看两点:.htaccess有没有被AllowOverride允许,以及面板里的伪静态选项有没有选成Typecho。AllowOverride设成None的时候,.htaccess写了等于没写。面板里如果选的是WordPress或者别的程序,规则内容也不对,要手动挑回Typecho那一项。

改完要reload,只保存文件就断定规则错,会白查一轮。Nginx用nginx -t先测语法,通过再reload;Apache改完.htaccess不用重启,但要确认AllowOverride不是None。还有一层是缓存:面板自带的缓存、CDN缓存、浏览器缓存,三层任意一层留着旧的404响应,前台看起来就像没改。测的时候先换无痕窗口,再清面板缓存,最后才怀疑规则本身。

拿一篇文章地址用curl -I请求一次,第一行应当是200。再故意访问一个不存在的地址,应当返回404而不是200。两条都过,才说明重写规则把两类请求分开了,没有一律兜到入口。

分页和分类页的规则常常和文章页不是一条。文章是archives/123这种,分类是category/xxx,分页还要在末尾带page/2。三类都点一遍,只测文章页容易漏。伪静态规则里如果只写了文章那一条,分类页会继续404,而文章页已经好了。首页能开、文章能开、分类打不开,通常就是规则只覆盖了其中一类。

顺序是先确认固定链接,再挑规则,最后reload。三步倒过来做,改错一处也看不出是哪一步的问题。改完把三类地址各记一条存档,同样是404,能立刻分出是程序那层还是服务器那层。

相关文章

标签:

A5创业网 版权所有