0

次のコードが欲しいheader ('Location:'. $U);

正しく導かれましたが、次の警告が表示されます。それを解決する方法です。

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>

ありがとう

4

2 に答える 2

3

このエラーは、実行されたページ、またはヘッダーの前に含まれていたページの 1 つが、リダイレクトを試みる前に少なくとも一部のコンテンツをエコーし​​たことを意味します。ファイル内でヘッダーを上に移動するか、ファイルに含まれるファイルがコンテンツをエコーし​​ないことを確認してください。あなたの場合、ファイルはhtmlファイルの先頭をエコーすることから始まるため、ファイルの一番上に移動する必要があります。

于 2013-08-04T13:14:46.190 に答える