ThinkPHP在Apache下配置伪静态需三步:启用rewrite_module模块、设置AllowOverride All(或FileInfo Options)、在public目录创建含RewriteEngine On及标准重写规则的.htaccess文件,缺一不可。

ThinkPHP在Apache下配置伪静态,核心是让访问路径如 /index/index 能直接生效,不带 index.php。这需要三方面配合:服务器模块启用、目录权限放开、规则文件写对。
启用 rewrite_module 模块
这是前提,没开启模块,后续所有规则都无效。
- Linux系统执行:
sudo a2enmod rewrite,然后重启 Apache:sudo systemctl restart apache2 - Windows下用 PHPStudy 或 phpEnv:打开设置 → Apache → 模块管理 → 勾选 rewrite_module;若没看到,手动编辑
httpd.conf,去掉这一行开头的#:#LoadModule rewrite_module modules/mod_rewrite.so
设置 AllowOverride 权限
Apache 默认禁止 .htaccess 生效,必须显式允许。
- 找到对应虚拟主机或主配置中的
<directory></directory>块(通常指向项目根目录或public/) - 将
AllowOverride None改为AllowOverride All或至少AllowOverride FileInfo Options - 改完保存,重启 Apache
创建并填写 .htaccess 文件
该文件必须放在入口文件 index.php 所在目录(通常是 public/ 目录),不是项目根目录。
- 新建文本文件,命名为
.htaccess(注意开头有个点,Windows 下需用记事本另存为,编码选 ANSI 或 UTF-8 无 BOM) - 填入标准规则(适用于模块化运行方式):
<ifmodule mod_rewrite.c><br> Options +FollowSymlinks -Multiviews<br> RewriteEngine On<br> RewriteCond %{REQUEST_FILENAME} !-d<br> RewriteCond %{REQUEST_FILENAME} !-f<br> RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]<br></ifmodule> - 如果项目部署在子目录(比如
http://localhost/myapp/),加一行:RewriteBase /myapp/(注意结尾斜杠) - 若用 FastCGI 模式(如部分 Linux 或 phpWAMP 站点管理),把 RewriteRule 改成:
RewriteRule ^(.*)$ index.php [E=PATH_INFO:$1,QSA,PT,L],否则会报 “No input file specified”
框架内确认路由已开启
服务器规则只是转发请求,最终还得 ThinkPHP 自己能解析。
- 检查
config/app.php中:'url_route_on' => true,'pathinfo_depr' => '/', - ThinkPHP 6 默认开启路由,但需确保中间件未禁用
think\middleware\ParseUrl - 访问
http://yourdomain.com/index/index能正常显示,说明配置成功;若仍提示 404 或跳转到 index.php 页面,重点检查 .htaccess 是否在正确目录、AllowOverride 是否生效
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











