我有这样的网址
mysite.com/view.php?id=123
我已使用 .htaccess 将 URL 更改为如下所示
mysite.com/123/page-title.html
现在,由于“页面标题”部分不是原始 URL 的一部分,而是来自对应于 id“123”的 mysql 表的信息,我如何 301 将旧 URL 重定向到新 URL?
当然肯定有一些PHP涉及,但我不知道如何在.htaccess中写...
现在,由于“页面标题”部分不是原始 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 中的任何其他内容。
看看这个教程。它应该很容易解释这一切。