我试图建立一个非常基本的网址缩短网站。我在本教程中使用了几乎所有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是这样的。rewriterrule有问题吗?
<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"时,长url将被很好地回显。所以在那之前一切都很好。也许是"header(…)"行。你觉得呢?
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");