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.
来限制访问
我分别尝试了以下几条规则,但一无所获:
'verses/view<?id=>' => 'Error404',
'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
参数中列出的路由将被忽略。
我正在使用 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.
我分别尝试了以下几条规则,但一无所获:
'verses/view<?id=>' => 'Error404',
'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
参数中列出的路由将被忽略。