Yii2 仅使用漂亮的 URL 获取访问权限

Yii2 get access only using pretty URLs

我正在使用 URL 管理器,如下所示:

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

使用 mysite.com/verses/view/158 进行访问工作正常。问题是,仍然可以使用非漂亮的 URL 访问相同的内容,即使用普通的获取参数,例如 mysite.com/verses/view?id=158。我需要任何方法来使用 pretty URL.

来限制访问

我分别尝试了以下几条规则,但一无所获:

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

这样的限制有什么意义?

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

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

无需更改 UrlManager。

尝试使用 UrlManager 参数 enableStrictParsing = true

发生了什么。 UrlManager 检查所有规则,它们都不符合请求。因此,默认情况下它会检查所有默认规则。在默认规则中,它会找到带有 ?id= 的规则并执行路由到该规则。

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