1

新しいルート要素を追加してサイトのリンク構造を変更しました。新しいルート要素のデフォルトを追加して古いリンクをリダイレクトしたいと考えています。

つまり、次のような以前の URL:mysite.com/category/product-name/

そして、私は次のように変更しました:mysite.com/store-section/category/product-name/

古いリンクを新しいものにリダイレクトして、デフォルトの store-section 要素を追加したい。カテゴリはカスタム routeClass を使用してデータベースから解析されるため、mod_rewrite ではこれを達成できないと思います。

Router::redirect()これを達成するためにルート要素を使用することは可能ですか?

4

1 に答える 1

0

Router::redirect() を使用する方法が見つからなかったので、元のルートを維持しました。

Router::connect("/:category/:product-name/*", 
    array(
        'controller' => 'products', 'action' => 'view'
    ), 
    array(
        'routeClass' => 'CategoryRouteClass', 
        'pass' => array('category', 'product-name')
    )
);

新しいURLに一致する新しいルートを追加し、同じメソッドと同じコントローラーを指しますが、新しいルート要素を追加してメソッド引数として渡します。

Router::connect("/:store-section/:category/:product-name/*", 
    array(
        'controller' => 'products', 'action' => 'view'
    ), 
    array(
        'routeClass' => 'CategoryRouteClass', 
        'pass' => array('category', 'product-name', 'store-section')
    )
);

...次に、製品コントローラーのビュー メソッドで、store-section パラメーターが設定されているかどうかを確認します。設定されていない場合は、次のように、現在の URL にデフォルトの store-section を追加するリダイレクトを発行します。

Class ProductsController extends AppController {
    public function view($category= null, $product-name = null, 
        $store-section = null) {

        if (empty($store-section)) {
            $this->redirect(array(
                'controller' => 'products', 'action' => 'view', 
                'category' => $category,
                'product-name' => $product-name, 
                'store-section' => 'default-section'), '301');
        }

        //.................
    }
}

これにより、古い製品の URL から新しい製品への 301 が正常に発行され、SEO に役立ち、古いインバウンドリンクを Cakephp で機能させ続けることができます。

于 2013-09-16T18:03:33.350 に答える