Yii2只能使用漂亮的URL访问

时间:2016-10-15 00:28:22

标签: yii2 yii2-basic-app

我正在使用以下网址管理器:

'urlManager' => [
            'enablePrettyUrl' => true,
            'showScriptName' => false,
            'rules' => [                
                'verses/view/<id:\d+>' => 'verses/view',                
            ],
        ],

可以使用mysite.com/verses/view/158进行访问。问题是,仍然可以使用非漂亮的URL访问相同的内容,即使用普通的get参数,例如mysite.com/verses/view?id=158。我需要以任何方式使用漂亮的URL限制访问。

我已经分别尝试了以下几对规则,但我没有得到任何规则:

  1. 'verses/view<?id=>' => 'Error404',
  2. 'verses/view?id=<\d+>' => 'Error404',

2 个答案:

答案 0 :(得分:1)

这种限制有什么意义?

无论如何,一种方法是这样的:

public function actionView($id)
{
    if (strpos(\Yii::$app->request->getUrl(), '?') !== false) {
        throw new \yii\web\BadRequestHttpException;
    }
    // ... the rest of action
}

不需要更改UrlManager。

答案 1 :(得分:1)

尝试使用UrlManager参数enableStrictParsing = true

会发生什么。 UrlManager检查所有rull并且它们都与请求不匹配。因此,默认情况下,它会检查所有默认规则。在默认规则中,它会找到?id=的规则,并预先路由到该规则。

因此,为了避免该路线,您需要列出UrlManger规则中的所有可能路线并制作enableStrictParsing = true。未在config rules参数中列出的路由将被忽略。