Yii2框架UrlManager规则无法生效,请求技术协助
我之前也碰到过类似的Yii路由配置问题,咱们来一步步理清楚:
首先,你当前的UrlManager配置里把enablePrettyUrl设为了false——这个开关直接决定了Yii是否会启用你写的rules路由规则。当它为false时,Yii会完全忽略rules里的所有映射,只认默认的?r=控制器/动作格式的路由。
这就是为什么http://exampler.com/web/index.php?r=site/login能正常访问(符合默认路由格式),而类似index.php?r=member的URL会返回404——因为Yii找不到对应的MemberController和默认动作,而且你的rules配置根本没生效。
两种解决思路:
1. 启用美化URL,让路由规则生效
把enablePrettyUrl改成true,同时根据你的服务器(Apache/Nginx)配置好重写规则,确保能去掉index.php或者正确解析美化后的URL。修改后的配置如下:
'urlManager' => [ 'class' => 'yii\web\UrlManager', 'enablePrettyUrl' => true, 'showScriptName' => false, // 可选,去掉URL里的index.php 'rules' => [ '' => 'site/index', 'member' => 'site/login', ], ],
配置完成后,访问http://example.com/web/member就会自动映射到site/login动作了。
2. 不启用美化URL,用控制器跳转实现
如果你不想开启美化URL,那可以创建一个MemberController,在它的index动作里跳转到site/login:
class MemberController extends \yii\web\Controller { public function actionIndex() { return $this->redirect(['site/login']); } }
这样访问http://example.com/web/index.php?r=member就会跳转到site/login,不会再返回404。
另外提个小细节:你写的两个URL里域名一个是exampler.com一个是example.com,如果是手误的话记得修正,域名不一致也可能导致访问问题哦。
内容的提问来源于stack exchange,提问作者NaturalBornCamper

