Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.htaccess URL中的Yi2尾随斜杠正在中断路由_.htaccess_Yii2_Yii Url Manager - Fatal编程技术网

.htaccess URL中的Yi2尾随斜杠正在中断路由

.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),

我在一个项目中配置了UrlManager,它按照我想要的方式工作。 现在,我尝试添加一个名称包含尾部斜杠的内容,但出现错误404(找不到对象)

例如: www.test.com/article/detail/id_of_article/title_of_article

文章标题=人们是…工作

文章标题=1/3的人是…=>不工作(找不到对象)

尾随斜杠打断了Url,尽管它是在%2F

以下是我创建url的方式:

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:你的意思是它可以被视为重复的内容?