3

私は codeigniter を使用して Web サイトを構築しており、URL は次の形式に従います: link1 では、123などの ID を使用してデータベースにレコードを照会します。

最後の uri セグメントは、SEO フレンドリーな目的のためだけのもので、何でも変更できます (例: link2)。

この回答に続いて、URLのすべてのバリエーションをリダイレクトして、最後のセグメントに正しいテキストを表示するにはどうすればよいですか?

URL がコントローラーで正しい形式であることを確認し、そこにリダイレクトする必要がありますか?

例えば

if($this->uri->rsegment(4, 0) !== $this->myModel->recordName) {
    redirect($id.'/'.$this->myModel->recordName);
}

ありがとう

---UPDATE1---

上記の方法で問題が見つかりました。時々、URL の最後に追加のセグメント (リンクなど) がある場合がありますが、これでは機能しません。

---UPDATE2---

これが私の最新のコードです。これは追加のセグメントを無視し、ID のみが提供されている場合に機能します。これが正しい/最善の方法であるかどうかを誰かが確認できることを願っています!

$correctRecordName = myEncodeForUrlFunction($this->myModel->recordName);
$rsegments = $this->uri->rsegment_array();

    if(count($rsegments) < 4 || $rsegments[4] !== $correctRecordName) {
        $rsegments[4] = $correctRecordName;
        $url = site_url($rsegments);
        redirect($url, 'location', 301);
    }
4

1 に答える 1