2015-06-30 2 views
2

Перенаправление все измененные/дублированные ссылки301 Перенаправление с правильной слизняк

/changed-title/2 
/another-changed-title/2 

Чтобы исправить URL

/original-correct-title/2 

Например

http://stackoverflow.com/questions/232323/original-title-of-question 

Если изменить последнюю часть URL (пробкового) и нажмите клавишу ВВОД

http://stackoverflow.com/questions/232323/changed-title-of-question-duplicate 

все еще перенаправляется исправить URL с правильным слизняк

Попробуйте на текущей странице

I хочу сделать то же самое

Я использую рамки symfony

routing.yml

topic_item_redirect: 
    path: /topic/{title}/{id} 
    defaults: { _controller: AppBundle:Topic:redirectToItem } 

topic_item: 
    path: /topic/{title}/{id} 
    defaults: { _controller: AppBundle:Topic:item } 

TopicController.php

public function redirectToItemAction($title,$id) { 

    $title = $this->getDoctrine()->getManager()->getConnection() 
     ->fetchColumn(
       'select title from topic where id = ?', 
       [$id]); 

    // action which renders topic 
    return $this->redirectToRoute('topic_item',['title'=>$title,'id'=>$id],301); 
} 

Этот подход не работает для меня

ответ

3

Для имитации SO поведение, которое вы можете добавить этот вид PHP фрагмент в TopicController.php:

$id = $_GET['id']; 
$title = $_GET['title']; 

$dbTitle = $this->getDoctrine()->getManager()->getConnection() 
    ->fetchColumn(
      'select title from topic where id = ?', 
      [$id]); 

if ($title != $dbTitle) { 
    // redirect with 301 to correct /questions/<id>/<title> page 
    header ('HTTP/1.1 301 Moved Permanently'); 
    header('Location: /questions/' . $id . '/' . $dbTitle); 
    exit; 
} 
// rest of your script 
0

Поскольку оба topic_item_redirect и topic_item используют тот же самый атрибут path, вы наверняка получите перенаправление каждый раз.

Думаю, вам нужно будет справиться с этим в своем контроллере: Получить slug, запросить DB и решить, нужно ли вам/не нужно перенаправлять.

Надеется, что это помогает

+1

Ах хорошо, ** @ анубхав ** 's ответ в значительной степени покрывает это ... –

+0

вы правы я получаю перенаправлять цикл !! – reverbnation