0

解決済み: 私のコメントを参照してください

ID とスラッグを同じ URL パラメーター (フォルダー) 内に配置して、URL を短縮しました。

例: www.domain/gsm/1_samsung-galaxy-s-ii​​i-16-gb ここで、「1」は ID、「samsung-galaxy-s-ii​​i-16-gb」はスラッグです。

これはうまく機能しますが、URLのスラッグをデータベースのスラッグにチェックする301リダイレクトスクリプトを作成しようとしています。それらが一致しない場合、ユーザーは正しいURLに301リダイレクトされます。

しかし、何らかの理由で、スクリプトは URL 全体を更新せず、間違ったスラッグの後に正しいスラッグを追加し、もちろんブラウザが保持されるまでこれを続けるため、リダイレクト ループに陥ります。

したがって、www.domain/gsm/1_bladiebla は www.domain/gsm/1_bladiebla_samsung-galaxy-s-ii​​i-16-gb_samsung-galaxy-s-ii​​i-16-gb_samsung-galaxy-s-ii​​i-16-gb_samsung-galaxy- にリダイレクトされます。 s-iii-16-gb.................

これは、コントローラーからのビュー関数です。

public function view($id = null) {
    $this->Smartphone->id = $id;
    if (!$this->Smartphone->exists()) {
        throw new NotFoundException(__('Invalid smartphone'));
    }
    $this->set('smartphone', $this->Smartphone->read(null, $id));

    $pieces = explode('_', $this->params['pass'][0]);

    if ($pieces[1] != $this->Smartphone->field('slug')) {
        $this->redirect(array('action' => 'view', $id.'_'.$this->Smartphone->field('slug')), 301);
    }
}

前もって感謝します!

4

0 に答える 0