-1

このURLから正規のリダイレクトを実行しようとしています

www.mysite.com/page.php?id=1&title=aaa

これに:www.mysite.com/1_aaa

私はこの関数を書きました:

function canonicalRedirect($url)
{

    if (strtoupper($_SERVER['REQUEST_METHOD']) == 'GET')
    {
        $canonical = $url;
        if (!preg_match('/'.str_replace('/','\/',$canonical).'/', $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']))
        {
            header('HTTP/1.0 301 Moved');
            header('Cache-Control: no-cache');
            header("Location: $canonical");
        }
    }
}

そして、page.phpにこのコードを入れました:

canonicalRedirect($url);

MySQLクエリから$url変数を取得します。ただし、実行しようとすると、次のエラーが発生します(Firefoxを使用しています):ページが正しくリダイレ​​クトされていません

ページが自己リダイレクトしていると思いますが、どうすればこの問題を解決できますか?ありがとう

4

2 に答える 2

0

変数$canonicalURLが関数で定義されていないため、リダイレクトの場所が空になります

于 2012-12-15T15:03:45.830 に答える
-1

ついに私は自分の問題をなんとか解決することができました。関数を次のように書き直しました。

function canonicalRedirect($url)
{
            //Check that there is not query string in the url
    if(preg_match('/\?/', $_SERVER["REQUEST_URI"])) {
        header('HTTP/1.0 301 Moved');
        header('Cache-Control: no-cache');
        header("Location: $url");
    }   
}

次に、page.phpコードでこれを書きました:

 // code to retrieve the canonical url from MySQL
 // $row is the array with the url data and $canonicalurl is obviously the canonical url


if($_GET['title'] != $row['url_title']) {

  header("HTTP/1.1 301 Moved");
  header('Status: 301 Moved Permanently', true);
  header("Location: ".$canonicalurl."",TRUE,301);
}
else {
}

canonicalRedirect($canonicalurl);

さよなら!

于 2012-12-18T10:41:26.987 に答える