Yii2 使用所需的urlformat时获取参数未正确返回
我在Yii2中的get params有点麻烦。我有如下代码: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 这正是我想要的。但是,当我尝试通过将其输入地址栏并
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大小写相同。