好的,这就是我所做的。首先,我将强制的 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 代码仍然存在的原因),但这是基本设置