我正在尝试构建一个非常基本的URL缩短网站。我在本教程中使用了几乎所有basixnick的编码(https://www.youtube.com/watch?v=ZnthmFQKlVY所有3个部分),但我遇到了问题。
当您在缩短收件箱中输入网址时,例如www.google.com,您将获得相应的缩短代码。然后,当您复制并粘贴网址时,我们会说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”;'很长的网址会很好地回应。所以到目前为止的一切都运行良好。也许这是'标题(...)'行。你觉得怎么样?
答案 0 :(得分: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
。
您需要制作它,以便缩短的网址包含协议(例如http://
或https://
),或者您将协议设为一个或另一个:
header("Location: http://$url");