URL中的Yii2尾随斜杠打破了路线

时间:2017-07-31 12:28:49

标签: .htaccess yii2 yii-url-manager

我在项目中配置了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;
}

我真的不知道如何处理这个问题。

3 个答案:

答案 0 :(得分:1)

对于此,最佳解决方案是使用 slug名称

而不是idtitle,请在数据库中再使用一个名为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