我使用URL管理器,如下所示:
'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。
我试过以下几种不同的规则,但没有得到任何结果:
'verses/view<?id=>' => 'Error404',
'verses/view?id=<\d+>' => 'Error404',
发布于 2016-10-15 05:48:16
这种限制有何意义呢?
不管怎样,有一种方法是这样的:
public function actionView($id)
{
if (strpos(\Yii::$app->request->getUrl(), '?') !== false) {
throw new \yii\web\BadRequestHttpException;
}
// ... the rest of action
}
不需要改变UrlManager。
发布于 2016-10-15 06:44:36
尝试使用UrlManager
参数enableStrictParsing = true
。
发生了什么。UrlManager检查所有规则,它们都与请求不匹配。因此,默认情况下,它检查所有默认规则。在默认规则中,它使用?id=
查找规则,并预先形成路由到该规则。
因此,为了避免该路由,您需要在UrlManger
规则中列出所有可能的路由并创建enableStrictParsing = true
。配置rules
参数中未列出的路由将被忽略。
https://stackoverflow.com/questions/40053770
复制相似问题