解決済み: 私のコメントを参照してください
ID とスラッグを同じ URL パラメーター (フォルダー) 内に配置して、URL を短縮しました。
例: www.domain/gsm/1_samsung-galaxy-s-iii-16-gb ここで、「1」は ID、「samsung-galaxy-s-iii-16-gb」はスラッグです。
これはうまく機能しますが、URLのスラッグをデータベースのスラッグにチェックする301リダイレクトスクリプトを作成しようとしています。それらが一致しない場合、ユーザーは正しいURLに301リダイレクトされます。
しかし、何らかの理由で、スクリプトは URL 全体を更新せず、間違ったスラッグの後に正しいスラッグを追加し、もちろんブラウザが保持されるまでこれを続けるため、リダイレクト ループに陥ります。
したがって、www.domain/gsm/1_bladiebla は www.domain/gsm/1_bladiebla_samsung-galaxy-s-iii-16-gb_samsung-galaxy-s-iii-16-gb_samsung-galaxy-s-iii-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);
}
}
前もって感謝します!