URLパターンが一致したときにセグメントにURLが追加されるように、フックをどのように作成する必要がありますか?
例えば:
/site/product/id
ルート:
/site/product/id/title-from-query
URLパターンが一致したときにセグメントにURLが追加されるように、フックをどのように作成する必要がありますか?
例えば:
/site/product/id
ルート:
/site/product/id/title-from-query
コメントで提案したように、Codeigniter のルートはこれに最適です。それらを使用すると、フレームワークにとって意味のあるものにプッシュしながら、ユーザー/ブラウザーが URL で表示できるものを正確に制御できます。
routes.php には、次のようなものが必要です。
$route['site/product/(:num)/(:any)'] = 'controller/method/$1';
$route['site/product/(:num)] = 'controller/method/$1';
最初の行の 2 番目のパラメータ(:any)
は、ルートが を受け入れることを許可するためのtitle-from-query
ものです。2 番目の行はオプションであり、no が指定されていない場合を処理するためにありtitle-from-query
ます。'controller/method'
コントローラーの名前と使用されているメソッドに置き換える必要があります。
アップデート:
これらの URL を作成するには (データベースにまだスラッグがない場合)、次のurl_title()
方法を使用できます。
echo anchor('site/product/id'.url_title($title));
上記は、最後に「スラッグ」とのリンクを作成します。リダイレクトを強制するには、コントローラーに正しいセグメントが設定されていることを確認し、設定されていない場合はリダイレクトする必要があります。StackOverflow の実装は、SEO 目的である可能性が最も高く、スラッグを削除すると、スラッグのあるアドレスに移動し、ID を使用してそれが何であるかを把握する必要があります。スラッグが提供されていない場合、リダイレクトするには同じロジックが必要になります。
redirect('/site/product/id/'.$slug, 'location', 301);