ThinkPHP多应用伪静态核心是Web服务器重写+路由配置+入口适配:Nginx需将/admin/请求转发至admin.php并保留PATH_INFO,admin应用须有独立public/admin.php入口并绑定模块,再通过app/admin/route.php定义简洁路由规则。

ThinkPHP 多应用模式下,admin 模块启用伪静态,核心是让 URL 从 /admin.php?s=/admin/index/index 或 /index.php/admin/index/index 变成更简洁的 /admin/、/admin/index/ 等形式。关键在于:**Web 服务器重写 + ThinkPHP 路由配置 + 多应用入口适配**。
Web 服务器重写规则(以 Nginx 为例)
Nginx 需将所有以 /admin/ 开头的请求,统一转发给 admin 应用的入口文件(如 public/admin.php),同时保留 PATH_INFO。
在 server 块中添加:
location /admin/ {
alias /path/to/your/project/public/admin/;
try_files $uri $uri/ /admin.php?$query_string;
}
<h1>若使用单入口(如 public/index.php 统一调度),则改用:</h1><h1>location /admin/ {</h1><h1>try_files $uri $uri/ /index.php?s=/admin$uri&$query_string;</h1><h1>}</h1><p></p>⚠️ 注意:
- 第一种方式要求存在独立的 public/admin.php 入口(推荐,更清晰);
- alias 后路径末尾需带 /,且必须指向 public/admin/ 目录(不是文件);
- Apache 用户请用 .htaccess,开启 RewriteEngine On,规则类似:RewriteRule ^admin/(.*)$ admin.php?s=/admin/$1 [QSA,L]
确保 admin 应用有独立入口文件
在 public/ 目录下创建 admin.php:
<?php // public/admin.php
define('APP_PATH', __DIR__ . '/../app/');
define('BIND_MODULE', 'admin'); // 强制绑定 admin 模块(即 admin 应用)
require __DIR__ . '/../thinkphp/start.php';
这样访问 /admin/ 就会直接运行 admin 应用,无需通过 index.php?s= 参数调度。
在 admin 应用内配置路由(可选但推荐)
编辑 app/admin/route.php,开启路由并定义简洁规则:
- 开启路由:确认
app/admin/config/app.php中'url_route_on' => true - 添加常用伪静态路由示例:
// app/admin/route.php
use think\facade\Route;
<p>Route::get('admin', 'index/index'); // /admin → admin/index/index
Route::get('admin/login', 'index/login'); // /admin/login → admin/index/login
Route::get('admin/:controller/:action', ':controller/:action');
</p>这样就能支持 /admin/、/admin/user/list 等干净路径。
URL 生成与兼容性处理
模板或代码中生成链接时,用 ThinkPHP 内置 URL 函数,自动适配伪静态:
-
url('index/index')→ 输出/admin/(当前应用下) -
url('admin/index/index')→ 输出/admin/(跨应用显式指定) - 确保
app/admin/config/app.php中'url_html_suffix' => ''(去掉 .html 后缀) - 若需隐藏 index.php,确认 Web 服务器已关闭 PATH_INFO 模式,启用
REQUEST_URI解析(ThinkPHP 默认支持)
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











