ThinkPHP6.0伪静态规则写在Web服务器配置中:Apache放public目录下.htaccess,Nginx放server块内location/中,IIS放项目根目录web.config;三者均须指向public/index.php并正确透传PATH_INFO。

ThinkPHP6.0 的伪静态规则不写在框架代码里,而是写在 Web 服务器的配置文件中,具体位置取决于你用的是什么服务器:
Apache:写在 .htaccess 文件里
- 文件位置:项目
public/目录下(不是根目录,TP6 入口强制在public/) - 原因:Apache 通过
.htaccess控制 URL 重写,但需确保:-
mod_rewrite模块已启用 - 虚拟主机配置中
AllowOverride设置为FileInfo Options(不能是None)
-
- 示例内容:
<ifmodule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L] </ifmodule>
Nginx:写在站点配置文件的 server 块内
- 文件位置:通常是
/www/server/panel/vhost/nginx/你的域名.conf(宝塔)或/etc/nginx/conf.d/xxx.conf - 关键:规则必须放在
location / { }中,且不能放在location ~ \.php$后面 - 推荐用
try_files(更安全):location / { try_files $uri $uri/ /public/index.php?$query_string; } - 若用
rewrite,必须明确指向/public/index.php,例如:location / { if (!-e $request_filename) { rewrite ^(.*)$ /public/index.php?s=$1 last; } }
IIS:写在 web.config 文件里
- 文件位置:项目根目录(即包含
public/文件夹的目录) - 前提:已安装 URL Rewrite Module 2.1+
- 示例内容(关键字段不能漏):
<?xml version="1.0" encoding="UTF-8"?><configuration><system.webserver><rewrite><rules><rule name="ThinkPHP6 Public Router" stopprocessing="true"><match url="^(.*)$"></match><conditions logicalgrouping="MatchAll" trackallcaptures="false"></conditions><action type="Rewrite" url="public/index.php?s={R:1}" appendquerystring="true"></action></rule></rules></rewrite></system.webserver></configuration>
注意:框架本身不存“伪静态规则文件”
- TP6 不读取
.htaccess、web.config或 Nginx 配置——这些是服务器行为 - 框架只负责解析被重写后的请求(如从
$_SERVER['PATH_INFO']或$_SERVER['REQUEST_URI']中提取路由) - 所以规则写错,框架不会报错,但会直接 404 或跳转到
index.php显示白屏
总结一句话:规则在哪,取决于你用什么服务器;但无论哪种,都必须让所有非静态资源请求最终落到 public/index.php,且路径和参数能正确传递给 TP6。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











