Yii2 Url Manager允许在网址中加上(+)

时间:2016-11-14 15:39:05

标签: php yii2

我试图在网址中添加加号,但我一直在404页面上结束。我试图匹配这样的网址:page / page + with + spaces

使用"页面+带+空格"成为slu ..

这就是我在配置中所拥有的:

    'urlManager'   => [
        'class'           => 'yii\web\UrlManager',
        'enablePrettyUrl' => true,
        'showScriptName'  => false,
        'rules'           => [
            'page/<slug:[a-zA-Z\+\-]+>' => 'page/view',
        ],
    ],

1 个答案:

答案 0 :(得分:3)

加号是对URL中的空格进行编码的方法之一。当网址传递给UrlManager的规则it has already been decoded时。

因此,如果您在浏览器中打开http://example.com/page/page+with+spaces,则传递给规则的字符串实际上将如下所示:/page/page with spaces

这可能是也可能不是你想要的。相同的网址可以表示为http://example.com/page/page%20with%20spaces,现代浏览器通常就是这种情况。

如果你真的想要提供一些页面以回复http://example.com/page/page+with+spaces,请将空格添加到slug的有效字符列表中,如下所示:'page/<slug:[a-zA-Z \-]+>'然后将你的slug设置为page with spaces

<强>更新 显然,+只是URL的查询组件中空格字符的有效编码,应该在路径组件(您尝试使用它)的字面上进行处理。但是,我现在已对此进行了测试,将替换为yii\web\Request中的空格,因此我的建议可行。

我的建议是避免加入网址,即使从技术上讲它们也是有效的。