根本原因是apache/nginx未正确启用url重写且yii的enableprettyurl未开启,需同时配置服务器重写规则与main.php中'urlmanager'的'enableprettyurl'=>true、'urlformat'=>'path'、'showscriptname'=>false,并确保documentroot指向项目根目录、.htaccess存在(apache)或nginx location规则正确、open_basedir允许框架路径。

Yii1.1.32项目部署到虚拟主机后出现“页面找不到”“404”或URL中强制带index.php(如/index.php?r=site/login)等现象,本质是Apache/Nginx未正确启用URL重写规则,导致框架无法解析美化URL(pretty URL),请求根本未进入Yii入口逻辑。
确认是否启用了prettyUrl
打开项目根目录下的protected/config/main.php,在'components' => array( ... )内部查找'urlManager'配置块。
确保包含以下两项且值为true和false:
'urlFormat'=>'path', 'showScriptName'=>false, 'enablePrettyUrl'=>true
⚠️ 如果'enablePrettyUrl'=>false或该配置项被注释/缺失,美化URL将完全失效,所有请求都会退化为index.php?r=xxx格式——此时即使服务器重写生效也无意义,必须先改回true。
Apache虚拟主机:启用mod_rewrite并验证.htaccess
第一步:确认Apache已加载rewrite模块。执行a2enmod rewrite(Debian/Ubuntu)或检查httpd.conf中LoadModule rewrite_module modules/mod_rewrite.so未被注释。
第二步:确保虚拟主机配置中允许覆盖规则。在<virtualhost></virtualhost>内对应DocumentRoot的<directory></directory>块中,必须有AllowOverride All(不能是None)。
第三步:检查项目根目录是否存在.htaccess文件。Yii1.1.32官方包自带该文件,内容应以RewriteEngine on开头,并包含标准重写规则。若被误删或权限设为000,重写即失效。
【关键前提】 虚拟主机的DocumentRoot必须指向your-project/(即含index.php和.htaccess的目录),而非your-project/protected/或your-project/assets/等子目录——否则.htaccess根本不会被Apache读取。
Nginx虚拟主机:手动配置location重写规则
Nginx不支持.htaccess,必须在server配置中显式声明重写逻辑。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
方法一:标准Yii1重写(推荐)
在server块中添加:
location / {<br> try_files $uri $uri/ /index.php?$args;<br>}
方法二:兼容隐藏index.php的严格模式
若上述仍跳转到index.php,改用:
location / {<br> if (!-e $request_filename){<br> rewrite ^/(.*) /index.php?r=$1 last;<br> }<br>}
⚠️ 注意:Nginx配置修改后必须执行nginx -t验证语法,再systemctl reload nginx生效,仅重启不够。
验证入口文件路径与open_basedir限制
第一步:检查index.php头部require路径是否正确。打开index.php,确认第3行类似:require_once(dirname(__FILE__).'/protected/framework/yii.php'); —— 其中protected/framework/yii.php必须真实存在且可读。
第二步:排查PHP open_basedir限制。若服务器报错failed to open stream: Operation not permitted,说明PHP禁止跨目录包含文件。需登录服务器,编辑php.ini或fastcgi.conf,找到open_basedir配置,将其值扩展为包含项目根目录,例如:/var/www/my-yii1-project/:/tmp/:/proc/。
【不可逆操作】 修改php.ini后必须重启PHP-FPM进程(如systemctl restart php-fpm),仅重载Nginx无效。










