.htaccess重写URL缩短规则


.htaccess RewriteRule for URL Shortener

我试图建立一个非常基本的网址缩短网站。我在本教程中使用了几乎所有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");