Yii2部署后404或URL带index.php是因Apache伪静态配置错误:先重命名.htaccess为备份,再直访index.php验证PHP层正常;然后严格按格式重建.htaccess,启用AllowOverride,最后确保urlManager中enablePrettyUrl、showScriptName、rules三项正确配置。

Yii2.0项目部署后出现404或URL始终带index.php,大概率是Apache伪静态规则写错导致请求根本没进PHP层,必须立刻停用错误规则、验证入口直访能力、再分步恢复正确配置。
第一步:停用当前错误的.htaccess规则
进入项目web目录(不是项目根目录),将现有.htaccess文件重命名为.htaccess.bak。Windows资源管理器可能不显示隐藏文件,建议用命令行操作:ren .htaccess .htaccess.bak。
【必须重命名而非删除】——保留原始文件便于比对,避免误删后无法回溯。
第二步:确认index.php可直接访问
在浏览器中手动输入http://your-domain.com/index.php/site/index(替换为你的域名和实际路由)。
若页面正常加载,说明Yii2框架初始化、路由注册、PHP环境均无问题;若返回500或空白,问题出在runtime目录权限、autoload路径或PHP扩展缺失,与伪静态无关;若返回404,检查web/index.php是否真在该路径下,重点核对phpEnv或宝塔中「网站目录」是否指向/web子目录而非项目根目录。
第三步:重建标准.htaccess文件
在web目录下新建纯文本文件,保存为.htaccess(注意开头的点,用记事本另存为时选择“所有文件”类型)。
内容严格按以下格式填写,**不能有多余空行、不能漏空格、不能用中文标点**:
Options +FollowSymLinks
IndexIgnore */*
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php
特别注意:RewriteCond %{REQUEST_FILENAME} !-f和!-d这两行缺一不可,否则真实存在的静态文件(如css/js)会被错误转发到index.php,导致资源加载失败。
第四步:启用Apache的AllowOverride
打开phpEnv控制面板 → 「网站管理」→ 编辑对应站点 → 找到Apache虚拟主机配置文件(通常位于phpenv\apache\conf\vhost\your-site.conf)。
定位到<directory></directory>这一段,将其改为指向web目录,并确保包含以下三行:
<Directory "D:/phpenv/www/your-project/web">
AllowOverride All
Require all granted
</Directory>
如果使用旧版Apache(2.2),则把Require all granted换成Order allow,deny和Allow from all。
第五步:验证并补全urlManager三项配置
打开config/web.php,找到components['urlManager']部分,确认以下三项已显式设置:
① 'enablePrettyUrl' => true —— 关闭则整个美化逻辑不启动
② 'showScriptName' => false —— 不设为false,生成的所有URL都会强制带上index.php
③ 'rules' => ['' => 'site/index'] —— 至少有一条兜底规则,否则访问根路径/直接报404
这三项缺一不可,少一个都会导致404或URL残留index.php。


















