我正在使用以下网址管理器:
'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',
答案 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
参数中列出的路由将被忽略。