0

我知道如何使用 HTML 中的“刷新”元标记进行重定向。如果找不到文件,我的网络主机 (Bluehost) 还会查找 404.SHTML 页面。但是,它似乎忽略了 404.PHP。

我想拦截我域中的无效 URL,并重定向到我在数据库中查找的相应页面。有点像 bit.ly 和其他缩写词。

因为我需要访问数据库,所以我想使用 PHP,但就像我说的,我的虚拟主机只支持 HTML 404 消息。

示例:用户键入“example.net/123”,其中目录 123 不存在。所以我想在我的数据库中查找“123”,它给出了“foo.php”作为相应的页面,所以用户被重定向到“example.net/foo.php”。我怎样才能做到这一点?

4

1 回答 1

0

好的,这就是我所做的。首先,我将强制的 404.shtml 重定向到我自己的 404.php 页面:

<html>
<head>
<title>404 Not Found</title>
<script type="text/javascript">
    window.location.href = "http://mydomain.com/404.php";
</script>
</head>
<body>
</body></html>

显然没有必要传递引用者,因为即使不这样做,404.php 也会看到原始引用者,而不是 404.shtml。很方便。所以我所要做的就是在数据库中查找新的 url。这是我的 404.php:

<?php
    $url = $_SERVER['HTTP_REFERER'];
    //extract the reference from the url
    $abbrev= substr($url, 20, 1000);

    $username="********";
    $password="********";
    $database="********";
    mysql_connect("localhost", $username, $password);
    @mysql_select_db($database) or die("unable to select database");

    $query="SELECT * FROM fwd WHERE abbrev =" . $abbrev;                
    $result=mysql_query($query);
    $url = mysql_result($result, $i, "url");
    header('Location: ' . $url);
?>

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>redirect</title>
</head>
<body>
</body>
</html>

当然我必须检查缩写是否在数据库中,如果不是则显示 404 消息(这就是 html 代码仍然存在的原因),但这是基本设置

于 2013-05-12T06:51:47.527 回答