我在项目中配置了UrlManager,它按照我想要的方式工作。 现在我尝试添加一个名称包含尾部斜杠的内容,但是我收到错误404(找不到对象)。
例如: www.test.com/article/detail/id_of_article/title_of_article
title_of_article = 人们...... => 工作
title_of_article = 1/3的人是...... => 不起作用(找不到对象)
Trailing Slash打破了Url,虽然它是以%2F
编码的这就是我创建网址的方式:
function checkAnswer($question1, $question2) {
$indexed_array1 = array_values($question1);
$indexed_array2 = array_values($question2);
if ($indexed_array1[0]==$indexed_array2[0]) { // for check the answer && $indexed_array1[n]==$indexed_array2[n] | if the answer index is 'n'
return true;
}
return false;
}
我真的不知道如何处理这个问题。
答案 0 :(得分:1)
对于此,最佳解决方案是使用 slug名称。
而不是id
和title
,请在数据库中再使用一个名为slug_name
的字段。
On添加或更新任何记录生成slug名称并存储在db。
中要生成slug名称,您可以使用自定义函数,如下所示。
public function getSlugName($id,$title)
{
$slug=$id;
if(isset($title) && $title!=null)
{
// remove all spacea
$slug.='-'.str_replace(' ','-',strtolower($title));
}
$slug=preg_replace('/[^A-Za-z0-9\-]/', '', $slug); // Removes special chars.
$slug=str_replace(array('--'), '-', $slug); // remove multiple --
return $slug;
}
此函数将返回uniq名称。所以你可以在url中使用它。
这也有助于SEO。
答案 1 :(得分:0)
UrlRule有一个encodeParams属性。请试试。
答案 2 :(得分:0)
可能需要URL normalization
从版本2.0.10开始,UrlManager可以配置为使用UrlNormalizer 用于处理相同URL的变体,例如with和 没有尾随斜线。
默认情况下,NB禁用UrlManager :: $ normalizer。您需要显式配置它才能启用URL规范化。
请点击此处http://www.yiiframework.com/doc-2.0/guide-runtime-routing.html#url-normalization