ThinkPHP 5.1 Apache伪静态需三者协同:启用mod_rewrite模块、将AllowOverride设为All(或FileInfo Options)、在public目录下配置含PT标志的.htaccess规则,并确保app.php中'url_route_on'=>true、'url_common'=>false、'pathinfo_depr'=>'/'。

ThinkPHP 5.1 在 Apache 环境下实现伪静态,核心是让 URL 去掉 index.php,例如把 http://domain.com/index.php/index/index 变成 http://domain.com/index/index。这需要三方面配合:Apache 模块启用、目录权限放开、.htaccess 规则正确,缺一不可。
确认并启用 Apache rewrite 模块
伪静态依赖 mod_rewrite,若未启用,所有规则都无效,且通常只报 404,日志也不提示原因。
- Linux 下执行:
sudo a2enmod rewrite,然后重启 Apache(sudo systemctl restart apache2) - Windows + PHPStudy:打开 PHPStudy → 设置 → Apache → 模块管理 → 勾选 rewrite_module → 保存
- 手动检查:
httpd -M | grep rewrite应输出rewrite_module (shared)
修改 Apache 目录权限 AllowOverride
Apache 默认禁止读取 .htaccess,必须显式允许,否则规则不生效。
- 编辑
httpd.conf或虚拟主机配置(如vhosts.conf) - 找到对应网站根目录的
块 - 将
AllowOverride None改为AllowOverride All或至少AllowOverride FileInfo Options - 若项目部署在子目录(如
/myapp/),还需在 .htaccess 中添加RewriteBase /myapp/
在 public 目录下创建 .htaccess 文件
ThinkPHP 5.1 入口文件 index.php 默认放在 public/ 目录,.htaccess 必须与它同级。
- 文件名严格为
.htaccess(开头带点,Windows 下需用记事本另存为并选择“所有文件”类型) - 内容如下(已适配 TP5.1 pathinfo 模式):
Options +FollowSymlinks -Multiviews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
注意:[PT](PassThrough)不可省略,否则 PATH_INFO 无法正确传递给框架;两个 RewriteCond 保证静态资源(JS/CSS/图片)不被错误重写。
检查 ThinkPHP 自身路由配置
服务器层配置只是“转发”,最终能否解析,取决于框架是否开启路由及匹配方式。
- 打开
config/app.php,确认以下配置存在且为 true: 'url_route_on' => true-
'url_common' => false(关闭普通模式,启用 pathinfo) -
'pathinfo_depr' => '/'(路径分隔符设为斜杠,与 .htaccess 中的index.php/$1一致) - 若使用子域名或二级目录部署,还需检查
URL_DOMAIN_DEPLOY和基础路径设置
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











