1

我有这样的网址

mysite.com/view.php?id=123

我已使用 .htaccess 将 URL 更改为如下所示

mysite.com/123/page-title.html

现在,由于“页面标题”部分不是原始 URL 的一部分,而是来自对应于 id“123”的 mysql 表的信息,我如何 301 将旧 URL 重定向到新 URL?

当然肯定有一些PHP涉及,但我不知道如何在.htaccess中写...

4

2 回答 2

3

现在,由于“页面标题”部分不是原始 URL 的一部分,而是来自对应于 id“123”的 mysql 表的信息,我如何 301 将旧 URL 重定向到新 URL?

您需要的唯一重写规则是使看起来更好看的 URL 路由到view.php,听起来您已经拥有了。可能看起来像这样:

RewriteCond %{REQUEST_FILENANE} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([0-9]+)/([^/]+)\.html /view.php?id=$1 [L]

当该请求到达时,view.php您可以检查$_SERVER['REQUEST_URI']变量,它看起来像'/123/page-title.html'. 当您看到这一点时,您就知道只是提供内容并完成它。

但是,当view.php看起来$_SERVER['REQUEST_URI']'/view.php?id=123'时,您就知道有人请求了该页面http://mysite.com/view.php?id=123,而不是看起来更好看的 URL。发生这种情况时,view.php需要使用 的净化值从数据库中查找页面标题$_GET['id'],然后创建重定向(所有这些都需要在任何内容打印到浏览器之前发生):

就像是:

    header('HTTP/1.1 301 Moved Permanently');
    header('Location: /' . $id . '/' . urlencode($page-title) . '.html');
    exit();

这会将浏览器重定向到页面http://mysite.com/view.php?id=123。您不需要 htaccess 中的任何其他内容。

于 2012-10-23T03:17:27.987 回答
0

看看这个教程。它应该很容易解释这一切。

于 2012-10-23T02:50:08.447 回答