我正在使用Yii2 advanced和Nginx。我的网址管理员:
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
'rules' => [
'test1' => 'page/view?id=1',
'test2' => 'page/view?id=2',
],
],
mydomain.com/page/view?id=1 - 它有效
mydomain.com/test1 - 不起作用。 404错误
它在Yii1中有效但在Yii2中不起作用。怎么了? 感谢。
答案 0 :(得分:1)
您可以在defaults属性中设置默认参数数组。
'rules' => [
[
'pattern' => 'test1',
'route' => 'page/view',
'defaults' => ['id' => 1],
],
],
答案 1 :(得分:0)
在规则中使用正则表达式参数:
'rules' => [
'test/<id:\d+>' => 'page/view',
],
另请参阅有关路由和网址创建的Yii2文档 http://www.yiiframework.com/doc-2.0/guide-runtime-routing.html#routing
答案 2 :(得分:0)
在urlManager
配置中,您应该只定义控制器和操作。
所以你的rules
将是:
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
'rules' => [
'test1' => 'page/view',
'test2' => 'page/view',
],
],
您可以通过链接@baseUrl/test1?id=1
和@baseUrl/test2?id=2
投放,或在您的视图中使用此urlHelper
:
Html::a('test1', \yii\helpers\Url::to(['test1', 'id' => 1]))
如果您希望test1
显示包含id=1
的网页视图,test2
将显示id=2
,您应该像这样配置规则:
'rules' => [
//other rules ...
[
'pattern' => 'test<id:\d+>',
'route' => 'page/view',
],
//other rules ...
],
希望这有用。
Goodluck,玩得开心。