Yii2 使用所需的urlformat时获取参数未正确返回

Yii2 使用所需的urlformat时获取参数未正确返回,yii2,yii2-advanced-app,yii-url-manager,Yii2,Yii2 Advanced App,Yii Url Manager,我在Yii2中的get params有点麻烦。我有如下代码: Url::to(['support/about', 'id' => 100]); 这将返回以下结果: echo Yii::$app->request->getQueryParam('id'); echo Yii::$app->request->get('id'); echo $_GET['id']; /support/about.php?id=100 这正是我想要的。但是,当我尝试通过将其输入地址栏并

我在Yii2中的get params有点麻烦。我有如下代码:

Url::to(['support/about', 'id' => 100]);
这将返回以下结果:

echo Yii::$app->request->getQueryParam('id');
echo Yii::$app->request->get('id');
echo $_GET['id'];
/support/about.php?id=100

这正是我想要的。但是,当我尝试通过将其输入地址栏并尝试使用以下命令获取id值来对其进行反向工程时:

echo Yii::$app->request->getQueryParam('id');
echo Yii::$app->request->get('id');
echo $_GET['id'];
我什么也得不到

但是,当我使用以下各项时,我确实得到了正确的值:

/support/about/100.php

我的url管理器如下所示:

        'urlManager' => [
                'enablePrettyUrl' => true,
                'showScriptName' => false,
                'enableStrictParsing' => false,
                'suffix' => '.php',
                //'cache' => 'cache',
                //'scriptUrl' => '',
                //'baseUrl' => '/',
                //'hostInfo' => 'http://www.yourhost.com.au',
                'routeParam' => 'r',
                'ruleConfig' => [
                        'class' => 'yii\web\UrlRule'
                ],
                'rules' => array(
                        [
                                'pattern' => '',
                                'route' => 'site/index',
                                'suffix' => '',
                        ],
                        [
                                'pattern' => '<action:\w+>',
                                'route' => 'site/<action>',
                                'suffix' => '.php',
                        ],
                        [
                                'pattern' => '<controller:support>',
                                'route' => '<controller>/index',
                                'suffix' => '/',
                        ],
                        [
                                'pattern' => '<controller:support>/<action:\w+>',
                                'route' => '<controller>/<action>',
                                'suffix' => '.php',
                        ],
                        [
                                'pattern' => '<module:\w+>/<action:\w+>',
                                'route' => '<module>/default/<action>',
                                'suffix' => '.html',
                        ],
                        [
                                'pattern' => 'gii',
                                'route' => 'gii',
                                'suffix' => '',
                        ],
                        [
                                'pattern' => '/<controller:\w+>/<action:\w+>',
                                'route' => 'gii/<controller>/<action>',
                                'suffix' => '',
                        ],
                        '<controller:\w+>/<id:\d+>' => '<controller>/view',
                        '<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
                        '<controller:\w+>/<action:\w+>' => '<controller>/<action>',             
                ),
        ],

让我们把问题缩小一点

由于您对特定URL存在问题,我们可以从URL管理器配置中删除与本案例无关的内容:

'urlManager' => [
    'enablePrettyUrl' => true,
    'showScriptName' => false,
    'rules' => [        
        [
            'pattern' => '<controller:support>',
            'route' => '<controller>/index',
            'suffix' => '/',
        ],
        [
            'pattern' => '<controller:support>/<action:\w+>',
            'route' => '<controller>/<action>',
            'suffix' => '.php',
        ],             
    ],
],

这意味着Yii工作正常,问题在于webserver配置

让我们把问题缩小一点

由于您对特定URL存在问题,我们可以从URL管理器配置中删除与本案例无关的内容:

'urlManager' => [
    'enablePrettyUrl' => true,
    'showScriptName' => false,
    'rules' => [        
        [
            'pattern' => '<controller:support>',
            'route' => '<controller>/index',
            'suffix' => '/',
        ],
        [
            'pattern' => '<controller:support>/<action:\w+>',
            'route' => '<controller>/<action>',
            'suffix' => '.php',
        ],             
    ],
],

这意味着Yii工作正常,问题在于webserver配置

看这个:还有这个:我可以创建url规则,我在解释为什么url::to按预期工作,但反向不工作。好的..我会告诉你这个。看这个:还有这个:我可以创建url规则,我想解释一下为什么Url::to按预期工作,但反过来却不起作用。好的。我会告诉你这个问题。但是用/support/about.php?id=10再试一次,你会发现它不起作用。逐字复制你得到的东西,同样的事情/support/about.php?id=10不起作用。您尝试过使用.html吗?如果.html有效,但.php无效,则表示原因是您的Web服务器配置。您的意思是什么?php不起作用不是因为Yii,而是因为您和我的服务器的配置方式。我使用的是nginx,所以在我的特殊情况下,这就是罪魁祸首:location~\.php${这意味着直接执行每一个PHP。如果我将重写位置以仅指定所需的PHP文件,它将与.html大小写相同。但是使用/support/about.PHP?id=10再试一次,您会发现它不起作用。逐字复制您得到的内容。/support/about.PHP?id=10不起作用。您尝试过使用.html吗?如果.html有效bphp不是,这意味着原因是您的Web服务器配置。您的意思是什么?您如何解决?php不起作用不是因为Yii,而是因为您和我的服务器的配置。我使用的是nginx,所以在我的特殊情况下,这就是罪魁祸首:location~\.php${这意味着直接执行每一个PHP。如果我重写location以只指定所需的PHP文件,它的工作方式将与.html大小写相同。