.htaccess URL中的Yi2尾随斜杠正在中断路由
我在一个项目中配置了UrlManager,它按照我想要的方式工作。 现在,我尝试添加一个名称包含尾部斜杠的内容,但出现错误404(找不到对象) 例如: www.test.com/article/detail/id_of_article/title_of_article 文章标题=人们是…工作 文章标题=1/3的人是…=>不工作(找不到对象) 尾随斜杠打断了Url,尽管它是在%2F 以下是我创建url的方式:.htaccess URL中的Yi2尾随斜杠正在中断路由,.htaccess,yii2,yii-url-manager,.htaccess,Yii2,Yii Url Manager,我在一个项目中配置了UrlManager,它按照我想要的方式工作。 现在,我尝试添加一个名称包含尾部斜杠的内容,但出现错误404(找不到对象) 例如: www.test.com/article/detail/id_of_article/title_of_article 文章标题=人们是…工作 文章标题=1/3的人是…=>不工作(找不到对象) 尾随斜杠打断了Url,尽管它是在%2F 以下是我创建url的方式: Html::a(Html::encode($model->title),
Html::a(Html::encode($model->title),
['article/detail', 'id' => $model->id, 'title' => $model->title])
我真的不知道如何处理这个问题。UrlRule有一个encodeParams属性。请尝试一下。为此,最好的解决方案是使用段塞名称 不要使用
id
和title
,而是在数据库中使用另一个名为slug\u name
的字段
在添加或更新任何记录时,生成slug名称并存储在数据库中
要生成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中使用它
这也有助于搜索引擎优化 可能是您需要的
URL规范化
由于版本2.0.10,可以将UrlManager配置为使用URLMescalizer
用于处理同一URL的变体,例如使用和
没有尾随斜杠
注意:默认情况下,UrlManager::$normalizer被禁用。您需要显式地配置它,以便启用URL规范化
看看这里如何这是个好主意。确实,它会通过删除特殊字符稍微改变标题名称,但这是一个很好的选择。@stfsngue:你的意思是它可以被视为重复的内容?