0

PHPがデータベースからhttp://を含むリンクとhttp://を含まないリンクを検出し、それらに基づいてユーザーを参照する際に問題が発生します。ここにコードがあります。

$url = $_GET['short'];

$route_url = mysql_result(mysql_query('SELECT original_url FROM ' . DB_TABLE . ' WHERE short_url = "' . mysql_real_escape_string($url) . '"'));

mysql_query('UPDATE ' . DB_TABLE . ' SET refferals = refferals + 1 WHERE short_url = "' . mysql_real_escape_string($url) . '"');

if(preg_match("/^[a-zA-Z]+[:\/\/]+[A-Za-z0-9\-_]+\\.+[A-Za-z0-9\.\/%&=\?\-_]+$/i", $route_url)) { 
header('HTTP/1.1 301 Moved Permanently');
header('Location: ' . $route_url);
} else {
$protocol = "http://";
header('HTTP/1.1 301 Moved Permanently');
header('Location: ' . $protocol.$route_url);
}
mysql_close();
exit;

私が間違っていることとそれを修正する方法を教えてもらえますか?http://とnon-http://(google.com)の両方がリダイレクトで動作します

4

1 に答える 1

0

@Supericy が提案したように、最初の URL 送信から http:// を削除して、次のように追加しました。

function http($url) {
   $disallowed = array('http://', 'https://');
   foreach($disallowed as $d) {
      if(strpos($url, $d) === 0) {
         return str_replace($d, '', $url);
      }
   }
   return $url;
}

そして今、ルーティングはうまく機能します

于 2013-02-05T21:44:15.787 に答える