如何使用.htaccess重定向到动态内容

时间:2014-06-29 06:28:36

标签: php .htaccess redirect seo

现在我知道如何编写SEO友好链接,我遇到了这个问题:如果我要在URL中使用条目标题,那么如果我更新该标题,链接将会被破坏。 / p>

现在我看到这个网站以这种方式解决了它:http://stackoverflow.com/questions/123456/any-title-name

他们将ID放在URL中,而标题放在另一个无关紧要的地方,因为如果任何用户更改了该标题,服务器会将其重定向到原始标题。例如:

  • 如果用户输入:http://stackoverflow.com/questions/123456/i-changed-that-name-lol
  • 服务器重定向到:http://stackoverflow.com/questions/123456/any-title-name

问题在于,您无法仅使用 .htaccess 正则表达式手动指定此项,因为您必须连接到数据库才能获取原始标题。如何重定向?

1 个答案:

答案 0 :(得分:0)

你是对的,这是不可能通过.htaccess做的。有一种方法可以通过Apache建立数据库连接,但我认为不可能将其与网址中的当前标题进行匹配。这意味着它很可能是查询数据库的脚本,并将重定向标头发送回客户端。

在php中,您可以使用header(...) function。使用Apache和php,您将得到如下代码:

<?php
$matches = Array();
preg_match("/^\/questions/([0-9]+)\/([^\/]+)$/", $_SERVER['REQUEST_URI'], $matches);

$db = new Database();
$seo_title = $db->getTitleById( $matches[1] );
if( $seo_title != $matches[2] ) {
  header( "Location: /questions/{$matches[1]}/{$seo_title}", TRUE, 301 );
  exit();
} else {
  display_the_page();
}