Yii2开启PrettyUrl后子页面及图片路径异常问题咨询
Yii2 伪静态配置后子页面无内容及图片路径异常问题
操作步骤
- 在
web.php中配置:
'request' => [ 'parsers' => [ 'application/json' => 'yii\web\JsonParser', ] ], 'urlManager' => [ 'enablePrettyUrl' => true, 'enableStrictParsing' => false, 'showScriptName' => false, 'rules' => [ ], ],
.htaccess配置:
RewriteEngine on # If a directory or a file exists, use it directly RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # Otherwise forward it to index.php RewriteRule . index.php
问题现象
- 访问
http://localhost:8888/site/web/可正常显示首页,但进入子页面后无内容; - 手动添加
index.php后子页面可正常显示,但数据库存储的图片路径(如upload//63b521df1b0e0.jpg)访问异常,实际生成链接为http://localhost:8888/site/web/index.php/listing/upload//63b521df27bf0.jpg,正确路径应为http://localhost:8888/site/web/upload//63b521df27bf0.jpg。
解决方案
你遗漏了以下关键配置:
1. 补充URL路由规则
urlManager的rules数组为空,Yii无法将伪静态URL映射到对应的控制器动作,导致子页面无法解析。添加基础路由规则:
'urlManager' => [ 'enablePrettyUrl' => true, 'enableStrictParsing' => false, 'showScriptName' => false, 'rules' => [ // 基础控制器/动作路由 '<controller:\w+>/<action:\w+>' => '<controller>/<action>', // 带ID的路由(如详情页) '<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>', ], ],
2. 正确配置请求基路径并生成图片链接
- 首先在
request组件中设置baseUrl,确保Yii识别当前站点的根目录:
'request' => [ 'baseUrl' => '/site/web', 'parsers' => [ 'application/json' => 'yii\web\JsonParser', ] ],
- 生成图片链接时,使用Yii提供的工具方法拼接根路径,避免带
index.php:
// 方法1:直接拼接baseUrl echo Yii::$app->request->baseUrl . '/upload/' . $model->image; // 方法2:使用Url助手生成绝对路径 echo \yii\helpers\Url::to(['/upload/' . $model->image], true);
3. 优化.htaccess规则
在RewriteRule后添加[L]标记,确保规则匹配后终止后续处理,避免潜在冲突:
RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L]
同时确保.htaccess文件放在site/web目录下,与index.php同级。
内容的提问来源于stack exchange,提问作者Naeem Marzu
相关产品推荐
相关产品推荐

