.htaccess URL Shortener的RewriteRule

时间:2013-03-05 22:10:48

标签: php .htaccess mod-rewrite url-shortener

我正在尝试构建一个非常基本的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”;'很长的网址会很好地回应。所以到目前为止的一切都运行良好。也许这是'标题(...)'行。你觉得怎么样?

1 个答案:

答案 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");