thinkphp5伪静态失败主因是服务器配置未对齐:域名须绑定到public目录、.htaccess须置于public下且含关键规则、nginx需显式设置fastcgi_param path_info、域名绑定路由需server_name匹配。

ThinkPHP5 路由伪静态绑定失败,90% 是因为「域名绑定」和「伪静态规则」没对齐——不是路由写错了,而是服务器把请求压根没送到 TP5 的入口文件 public/index.php,或者送到了但 PATH_INFO 没解析出来。
确认域名是否真正绑定到 public 目录
TP5.1+ 强制入口为 public/index.php,但很多人把域名直接绑在项目根目录(含 application 那层),导致 .htaccess 或 Nginx 规则找不到入口文件,直接 404。
- Apache 下:检查虚拟主机配置中
<directory></directory>指向的路径是不是/your/project/path/public,且含AllowOverride All - Nginx 下:宝塔 → 网站 → 设置 → 运行目录,必须选
/public;手动配置则需确保root指向 public 目录,例如root /var/www/tp5/public; - 验证方式:直接访问
http://yourdomain.com/index.php,如果报 404 或提示“找不到控制器”,说明域名没绑对位置
Apache .htaccess 必须放在 public 目录下
把 .htaccess 放错位置是 TP5 伪静态最常见死因。它不能在项目根目录,也不能在 application 或 config 目录里,只认 public/ 这一层。
- 正确路径:
public/.htaccess - 内容必须包含
RewriteBase /(若部署在子目录如/shop/,则写RewriteBase /shop/) - 关键规则段不能缺:
RewriteCond %{REQUEST_FILENAME} !-d和RewriteCond %{REQUEST_FILENAME} !-f,否则真实存在的静态资源(如css/app.css)会被错误转发 - 最后一行建议用
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L],PT标志确保能穿透到 PHP 处理环节
Nginx 中 fastcgi_param PATH_INFO 必须显式设置
TP5 默认靠 $_SERVER['PATH_INFO'] 解析路由,但 Nginx 不会自动填充它。只写 try_files 或 rewrite 规则而漏掉这行,框架收不到路由参数,所有伪静态地址都会 fallback 到首页或报错。
- 在
location ~ \.php$块内,必须有:fastcgi_param PATH_INFO $fastcgi_path_info; - 同时确认已有:
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;($realpath_root能正确解析符号链接,比$document_root更稳) - 若用宝塔,进「网站 → 设置 → 配置文件」,在
location ~ \.php$区域手动追加这两行,保存后重载 Nginx - 不加这行,
$_SERVER['PATH_INFO']为空,url_route_on形同虚设
路由定义与域名绑定需共用同一 host
TP5 的域名绑定路由(如 Route::domain('api.example.com', [...]))只在请求 Host 头匹配时才生效。如果 Nginx/Apache 把所有域名都指向同一个 root,但没在 server_name 或 VirtualHost 里明确声明该域名,绑定路由永远不会触发。
- Apache:确保
<virtualhost></virtualhost>块中有ServerName api.example.com且配置已启用 - Nginx:对应
server块中必须有server_name api.example.com;,多个域名用空格分隔 - 测试方法:在路由闭包里临时加
dump($_SERVER['HTTP_HOST']);,看输出是否是你期望的绑定域名 - 注意 hosts 文件或本地 DNS 缓存干扰,开发时建议用真实二级域名 + 修改本地 hosts 测试
真正卡住的地方往往不是路由语法,而是服务器把请求“转丢了”——要么没进 public/index.php,要么进了但 PATH_INFO 是空的,要么域名根本没被识别。先盯住这三处,比反复改 route.php 有效得多。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











