重定向所有已更改/重复的网址
/changed-title/2
/another-changed-title/2
更正网址
/original-correct-title/2
例如
http://stackoverflow.com/questions/232323/original-title-of-question
如果我更改url(slug)的最后一部分并按Enter键
http://stackoverflow.com/questions/232323/changed-title-of-question-duplicate
仍会被重定向到正确的slug正确的网址
在当前页面上尝试
我想做同样的事情
我正在使用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);
}
这种方法对我不起作用
答案 0 :(得分:3)
要模拟SO行为,您可以在TopicController.php
中添加此类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
答案 1 :(得分:0)
由于topic_item_redirect
和topic_item
都使用相同的path
属性,因此您每次都会被重定向。
我认为您需要在控制器中处理此问题:获取slug,查询DB
并确定是否需要/不需要重定向。
希望这有帮助