2013-08-04 131 views
0

我想下面的代码header ('Location:'. $U);PHP头不工作

遵循正道,但我发现了以下警告,如何解决它。

Warning: Cannot modify header information - headers already sent by (output started at H:\xampp\htdocs\redirected\index.php:8) in H:\xampp\htdocs\redirected\index.php on line 53 

我想:

http://mydomian/google redirect to http://google.com

http://mydomian/yahoo redirect to http://yahoo.com

http://mydomian/anyname redirect to http://Every site that I like

..............................

我htacess文件:

<Files ~ "^\.(htaccess|htpasswd)$"> 
deny from all 
</Files> 
ErrorDocument 404 /redirected/index.php 
order deny,allow 
在重定向文件夹

我有文件的index.phphtaccess.txt

htaccess.txt:

/google http://google.com 
/yahoo http://yahoo.com 

的index.php:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>script for redirect !!!</title> 
</head> 
<body> 
<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>" method="post"> 
    <input type="text" name="url" placeholder="e.g google.com" required/> 
    <input type="text" name="dir" placeholder="dir" value=<?php echo htmlspecialchars($_SERVER['REQUEST_URI']);?> required/> 
    <input type="submit" /> 
</form> 
<?php 
    $url = (isset($_POST['url'])) ? $_POST['url'] : ''; 
    $dir = (isset($_POST['dir'])) ? $_POST['dir'] : ''; 
    $filename = 'htaccess.txt'; 
    /* 
    * 
    * Function to make URLs into links 
    * 
    * @param string The url string 
    * 
    * @return string 
    * 
    */ 
    function makeLink($string){ 
     /*** make sure there is an http:// on all URLs ***/ 
     $string = preg_replace("/([^\w\/])(www\.[a-z0-9\-]+\.[a-z0-9\-]+)/i", "$1http://$2",$string); 
     /*** make all URLs links ***/ 
     $string = preg_replace("/([\w]+:\/\/[\w-?&;#~=\.\/\@]+[\w\/])/i","<a target=\"_blank\" href=\"$1\">$1</A>",$string); 
     /*** make all emails hot links ***/ 
     $string = preg_replace("/([\w-?&;#~=\.\/]+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?))/i","<A HREF=\"mailto:$1\">$1</A>",$string); 

     return $string; 
    } 

    function redirect($url){ 
     if (headers_sent()) { 
      die('<script type="text/javascript">window.location.href="' . $url . '";</script>'); 
     }else { 
      header('Location: ' . $url); 
      die(); 
     }  
    } 
    $f = !empty($dir) ? $dir: htmlspecialchars($_SERVER['REQUEST_URI']); 

     $fp = fopen($filename , 'r+') or die("can't open file ! "); 
     while (!feof($fp)) { 
      $line = fgets($fp, 1024); 
      if ($f === strstr($line, ' ', true)) { 
       $u = strstr($line, 'http'); 
       //redirect($u); 
       //echo '<script type="text/javascript">window.location.href="' . $u . '";</script>'; 
       header('Location: ' . $u); 
       exit; 
      } 
     } 
     if ($url != '' && !empty($dir)) { 

     fseek($fp, 0, SEEK_END); // Go to the end of the file 
     fwrite($fp,"/$dir http://$url \n"); 
     fclose($fp); 
    } 

?> 
</body> 
</html> 

感谢

+1

什么是$ u?您已将重定向函数中的参数定义为$ url。 –

+1

你正在输出这行(第8行,就像错误告诉你的一样):'

”'。将你的'header()'移动到该行的上方。 –

+1

因为在使用标题位置之前,您已经输出了一些内容。 – TroyCheng

回答

3

此错误执行的页面,或者这是你的头前,包括网页,呼应至少一些内容你试图重定向之前。将文件头向上移动到文件中,或确保文件包含的文件不会回显任何内容。在你的情况下,你必须将它移动到文件的最顶端,因为你的文件是以回显html文件的开始处开始的。

1

在html标记之前做标题重定向,很多帖子在stackoverflow中应该指出。

<?php 
header ('Location:'. $U); 
?> 
<html>