Yii2框架中如何将URL转换为路径分段形式的正确格式
Yii2框架实现
web/tasks/view/1格式URL的配置方法 配置位置
修改对应应用的Web配置文件即可:
- 基础版Yii2:配置文件路径为
config/web.php - 高级版Yii2:前台配置路径为
frontend/config/main.php,后台配置路径为backend/config/main.php
所有配置都写在配置数组的components节点下。
第一步:配置urlManager组件
在配置数组中新增或修改urlManager组件配置,开启URL美化并添加对应路由规则:
return [ // 其他顶层配置省略 'components' => [ // 其他组件配置省略 'urlManager' => [ 'enablePrettyUrl' => true, // 开启路径式URL美化 'showScriptName' => false, // 隐藏入口文件index.php 'rules' => [ // 任务详情页路由规则,限定id为数字 'tasks/view/<id:\d+>' => 'tasks/view', // 可根据需要补充其他任务相关路由,比如任务列表页 'tasks' => 'tasks/index', ], ], ], ];
第二步:配置Web服务器重写规则
开启URL美化后需要配置重写规则,否则会出现404错误:
- Apache环境:确保
web目录下存在.htaccess文件,内容如下:
RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php
同时确保Apache配置中站点目录开启了AllowOverride All权限。
- Nginx环境:在站点配置的server块中添加如下配置:
location / { try_files $uri $uri/ /index.php?$args; }
修改配置后重启Web服务器生效。
第三步:修正Url助手的调用代码
你原来的Url::to()调用路由写法有误,第一个参数没有指定具体动作,导致框架把view识别成普通查询参数。需要把路由明确指向tasks/view动作,参数名和路由规则中的占位符保持一致,修改为:
<?php echo Url::to(['/tasks/view', 'id' => $task->id]);?>
配置完成后,上述代码就会输出web/tasks/view/1格式的URL,同时该URL可以正常路由到TasksController的actionView(int $id)方法,不会影响原有业务逻辑。
内容的提问来源于stack exchange,提问作者user17045604
相关产品推荐
相关产品推荐

