我试图在网址中添加加号,但我一直在404页面上结束。我试图匹配这样的网址:page / page + with + spaces
使用"页面+带+空格"成为slu ..
这就是我在配置中所拥有的:
'urlManager' => [
'class' => 'yii\web\UrlManager',
'enablePrettyUrl' => true,
'showScriptName' => false,
'rules' => [
'page/<slug:[a-zA-Z\+\-]+>' => 'page/view',
],
],
答案 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
中的空格,因此我的建议可行。
我的建议是避免加入网址,即使从技术上讲它们也是有效的。