2016-06-14 6 views
0

にリダイレクトしている間、私はダッシュで区切られ、私のURLに私の記事のタイトルを持つようにしたいと私はthis answerとこれとそれを行うには、私のコードです:エラーCodeIgniterの

public function post($post_id, $slug = ''){ 
    $data['post'] = $this->posts_model->get_post_by_id($post_id); 
    if ($slug) { 
     $get_title = $data['post']->post_slug; 
     redirect('blog/' . $post_id . '/' . $get_title); 
    } 
    $this->load->view('pages/show-post', $data); 
} 

、これらは私のルートです:

$route['blog/(:num)'] = 'blog/post/$1'; 
$route['blog/(:num)/(:any)'] = 'blog/post/$1/$2'; 

問題:私はロード時に私のexample.com/blog/1すべてがOKですが、私はexample.com/blog/1/anything自分のコードをロードする際には、成功しexample.com/blog/1/my-slug-from-databaseに私をリダイレクトしますが、ページの読み込みが失敗したとFirefoxが私を見ますThe page isn't redirecting properlyエラーです。

どうすればこの問題を解決できますか?私のコードに問題はありますか?

ありがとうございました!

答えて

2

example.com/blog/1/anythingにアクセスし、example.com/blog/1/my-slug-from-databaseにリダイレクトされます。今すぐCIで、あなたは同じ関数になり、$slugが真であるので、あなたはexample.com/blog/1/my-slug-from-databaseに再びリダイレクトされます。リダイレクトループがあります。つまり、ページが正しくリダイレ​​クトされないというエラーが発生します。

リダイレクトを停止する方法が必要です - あなたのコードから見る限り、$slug === $get_titleかどうかを確認し、そうであればリダイレクトしないでください。しかし、あなたが何をしようとするのか分からないので、何をすべきかを知ることは本当に難しいです。

1

あなたが本当に望んでいるのは、リンクの品質を向上させてSEOの目的でスラッグなしで表示するURLを防ぐことです。

変更行:

if (!$slug) { 

if ($slug) { 

そして、コードが中に閉じ込められ得ることはありません理由だけではなく、だけでなく、スラグが設けられている場合、IEはリダイレクトにコードを変更しませんリダイレクトループ(Ron Dadonによって提案されているように)とその投稿は常にURLのスラッグとともに表示されます。

あなたの質問にあるように、投稿にリンクする他の理由を推測できません。example.com/blog/1/anything - なぜanythingをURLに入れたいですか?これはスラッグだけかもしれない、そう?