如何在 Yii2 urlManager 中为默认页面创建干净的 url

How to create clean url for Default page in Yii2 urlManager

我的索引规则如下:

[
    'pattern' => 'page/<page:\d+>',
    'route' => 'site/index',
],

它有效,但在分页中,第一页是 example/page/1,我将规则更改如下:

[
    'pattern' => 'page/<page:\d+>',
    'route' => 'site/index',
    'defaults' => ['page' => 1],
],

现在首页变成了example.com/page

如何写规则,让分页第一页显示像example.com

根据你的问题和你的评论,我建议你另外添加一个空白 url 模式的规则,即 url 仅包含域,指向你的 defaultRoute 具有默认的 $page 参数值。

'rules' => [
    [
        'pattern' => '',
        'route' => 'site/index',
        'defaults' => ['page' => 1],
    ],
    [
        'pattern' => 'page/<page:\d+>',
        'route' => 'site/index',
    ],
],

然后,在您的控制器操作中,您可以测试此 url 规则是否正常工作,如下所示:

public function actionIndex($page)
{
    echo '<pre>';
    echo 'site / index / $page ' . print_r($page, true);
    echo '</pre>';
    exit;
}

另请注意,您可以像这样在控制器操作的方法声明中设置默认值:

public function actionIndex($page = 1)
{
    echo '<pre>';
    echo 'site / index / $page ' . print_r($page, true);
    echo '</pre>';
    exit;
}

这样可以简化您的配置,如下所示:

'rules' => [
    [
        'pattern' => '',
        'route' => 'site/index',
    ],
    [
        'pattern' => 'page/<page:\d+>',
        'route' => 'site/index',
    ],
],