0

我正在尝试建立一个非常基本的 URL 缩短网站。我在本教程中使用了几乎所有 basixnick 的编码(https://www.youtube.com/watch?v=ZnthmFQKlVY所有 3 个部分),但我遇到了问题。

当您在缩短收件箱中输入 URL 时,例如 www.google.com,您将获得相应的缩短代码。然后,当您复制并粘贴 URL(例如 www.mysite.com/xyz123)时,它会将您重定向到 www.mysite.com/www.google.com 而不是简单的 www.google.com。

.htaccess 看起来像这样。RewriteRule 有问题吗?

<Files .htaccess>
order allow,deny
</Files>

Options +FollowSymLinks
RewriteEngine On

RewriteRule ^(\w+)$ ./load.php?code=$1

编辑提问:

这是我的 load.php 文件:

<?php
$code = $_GET['code'];

require("./connect.php");

$query = mysql_query("SELECT * FROM items WHERE code='$code'");
$numrows = mysql_num_rows($query);

if ($numrows == 1) {
    $row = mysql_fetch_assoc($query);
    $url = $row['url'];

    header("Location: $url");
}
else
    echo "No shortened url was found.";

mysql_close();

?>

当我删除 'header(...)' 代码并将其替换为 'echo "$url";' 长网址会很好地回显。所以到目前为止一切正常。也许它是“标题(...)”行。你怎么看?

4

1 回答 1

1

有问题load.php,重写规则没有问题。看起来重定向代码正在重定向到/www.google.com而不是www.google.com.


编辑:

如果$url变量是字面意思www.google.com,那么这就是问题所在。浏览器将假定这www.google.com是一个相对 URI,并将其附加到它用于发出请求的 URL 路径中,http://www.mysite.com/www.google.com.

您要么需要使缩短的 URL 包含协议(例如http://https://),要么将协议设置为一个或另一个:

header("Location: http://$url");
于 2013-03-05T22:24:10.243 回答