frankenphp下wordpress固定链接404,主因是未配置frankenphp.yaml的fallback规则及未刷新rewrite_rules;需显式设置fallback: "/index.php"、配置host与pathprefix路由,并执行flush_rewrite_rules()生成数据库重写规则,同时确保path_info可用。

FrankenPHP下固定链接全404,根本不是rewrite没生效
FrankenPHP不走Apache/Nginx那一套mod_rewrite或try_files逻辑,它压根不读.htaccess,也不依赖mod_rewrite模块——所以你反复点「保存更改」、重写.htaccess、甚至检查AllowOverride All,全是在对空气调试。
FrankenPHP的路由转发必须靠frankenphp.yaml显式配置
它用的是SAPI直连+PHP原生路由机制,所有请求默认只进index.php,但前提是:你得告诉FrankenPHP哪些路径该交给WordPress处理。否则它会把/hello-world/当成静态路径查找,找不到就直接返回404。
- 在网站根目录创建或编辑
frankenphp.yaml - 确保包含以下最小必要配置:
entrypoints:
web:
http:
# 必须启用path-based routing
router: wordpress
routers:
wordpress:
rule: "Host(`yourdomain.com`) && PathPrefix(`/`)"
services:
- wordpress
services:
wordpress:
load: "."
# 关键:让所有非静态资源都 fallback 到 index.php
fallback: "/index.php"
-
fallback: "/index.php"是核心,缺了它,任何不含.php后缀的路径(比如/about/)都会被当作静态文件处理 - 如果启用了HTTPS,
Host()里要写实际域名,不能留空或用*
WordPress内部重写规则也要手动触发一次
FrankenPHP不会自动调用flush_rewrite_rules(),即使你改了固定链接设置,wp_options表里的rewrite_rules选项可能还是空的或过期的——导致index.php收到请求后,自己也解析不出对应的文章。
将 LaTeX(.tex)学术论文转换为 Word(.docx),支持可编辑的 OMML 公式、原生 Word 表格、嵌入图形、IEEE 双栏排版及参考文献
- 临时在主题
functions.php末尾加一行:flush_rewrite_rules(); - 访问一次前台任意页面(触发执行),然后立刻删掉这行(避免每次请求都重刷规则)
- 检查数据库
wp_options表中rewrite_rules字段是否已生成大量正则规则(不是空字符串或a:0:{})
常见漏掉的硬性依赖
FrankenPHP跑WordPress不是“装完就能用”,有几个底层条件不满足,前面所有配置都白搭:
-
PATH_INFO必须可用:FrankenPHP默认传递SCRIPT_NAME和REQUEST_URI,但WordPress的WP_Rewrite依赖PATH_INFO提取路径段;需确认phpinfo()里$_SERVER['PATH_INFO']有值 - 伪静态模式不能选「朴素」:固定链接设成
?p=123形式时,FrankenPHP能通,但一旦切到/post-name/,就完全依赖上面的fallback和rewrite_rules双配合 - 静态资源路径别被误拦截:如果
frankenphp.yaml里router规则太宽(比如没排除.css/.js),可能把JS/CSS也扔给index.php,造成前端报错
最常被忽略的是PATH_INFO支持——FrankenPHP文档里提过,某些构建版本默认禁用它,得在启动参数加--enable-path-info才开。没这个,/hello-world/进来后,WordPress连路径第一段都拿不到。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










