Yii2只能使用漂亮的URL访问

Yii2只能使用漂亮的URL访问,yii2,yii2-basic-app,Yii2,Yii2 Basic App,我使用的URL管理器如下所示: 'urlManager' => [ 'enablePrettyUrl' => true, 'showScriptName' => false, 'rules' => [ 'verses/view/<id:\d+>' => 'verses/view',

我使用的URL管理器如下所示:

'urlManager' => [
            'enablePrettyUrl' => true,
            'showScriptName' => false,
            'rules' => [                
                'verses/view/<id:\d+>' => 'verses/view',                
            ],
        ],
'urlManager'=>[
“enablePrettyUrl”=>true,
'showScriptName'=>false,
“规则”=>[
“诗篇/视图/”=>“诗篇/视图”,
],
],
使用
mysite.com/verses/view/158
进行访问,效果很好。问题是,仍然可以使用非漂亮URL访问相同的内容,即使用简单的get参数,例如
mysite.com/verses/view?id=158
。我需要任何方法来限制访问使用漂亮的网址

我分别尝试了以下几条规则,但都没有得到:


  • ”诗句/观点这样的限制有什么意义

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

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

    不需要对UrlManager进行任何更改。

    这样的限制有什么意义

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

    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检查所有RULL,但它们都与请求不匹配。因此,默认情况下,它会检查所有默认规则。在默认规则中,它找到具有
    ?id=
    的规则,并执行到该规则的路由


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

    尝试使用
    UrlManager
    参数
    enableStrictParsing=true

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


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

    这是一个很好的解决方案。但是,必须为应用程序必须可访问的每个公共行为创建非常大的规则列表。这会使事情变得更复杂。你只需要使用更一般的规则,如
    /
    ,这是一个很好的解决方案。但是,必须为应用程序必须可访问的每个公共行为创建非常大的规则列表。这将使事情变得更复杂。您只需要使用更一般的规则,如
    /
    ,也可以通过使用此签入将其推广到所有控制器的操作,也可以通过使用此签入将其推广到所有控制器的操作