Yii2只能使用漂亮的URL访问
我使用的URL管理器如下所示:Yii2只能使用漂亮的URL访问,yii2,yii2-basic-app,Yii2,Yii2 Basic App,我使用的URL管理器如下所示: 'urlManager' => [ 'enablePrettyUrl' => true, 'showScriptName' => false, 'rules' => [ 'verses/view/<id:\d+>' => 'verses/view',
'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
。配置规则参数中未列出的路线将被忽略。这是一个很好的解决方案。但是,必须为应用程序必须可访问的每个公共行为创建非常大的规则列表。这会使事情变得更复杂。你只需要使用更一般的规则,如/
,这是一个很好的解决方案。但是,必须为应用程序必须可访问的每个公共行为创建非常大的规则列表。这将使事情变得更复杂。您只需要使用更一般的规则,如/
,也可以通过使用此签入将其推广到所有控制器的操作,也可以通过使用此签入将其推广到所有控制器的操作