2013-03-05 67 views
0

我想要构建一个非常基本的网址缩短网站。我在本教程中使用了几乎所有basixnick的编码(https://www.youtube.com/watch?v=ZnthmFQKlVY全部3部分),但我遇到了问题。.htaccess网址缩写器的重写规则

当您在缩短收件箱(例如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(...)'行。你怎么看?

回答

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"); 
+0

我添加了一个编辑的下半部分我的问题。感谢您的输入。我不认为有人会这么快反应,所以我很感激任何意见。 – user1800951 2013-03-06 02:31:16

+0

我将它改为'header(“Location:http:// $ url”);'它工作!哇。非常感谢。我必须保留它,或者找到一种方法在数据库中的$ url的开头添加“http://”或“https://”(如果用户没有添加它)。谢谢。 – user1800951 2013-03-06 03:11:46