-1

私のリンクは「http://www.shinylook.ro/product.php?id=58」のようなもので、次のように書き換えます

"http://www.shinylook.ro/produs/58/saboti-dama/"

このコードを使用して:

RewriteRule ^produs/([0-9]+)/([a-zA-Z0-9_-]+)\/ product.php?id=$1 [L]

しかし、古いリンクを新しいリンクにリダイレクトすることはできません。誰かが古いものを入力すると、新しいものにリダイレクトされます。

私はこれを試しました:

RewriteRule ^product.php?id=$1 produs/([0-9]+)/([a-zA-Z0-9_-]+)\/  [L,R=301]

しかし、うまくいきません。

この問題を解決するにはどうすればよいですか?

編集:

PHP コードを書くことができました... で試すことができますwww.shinylook.ro/redirect_old_links.php?id=44

しかし、htaccess書き換えコードを解決してそのファイルにリダイレクトすることはできません...

使ったRewriteRule ^product.php?id=([0-9]+) redirect_old_links.php?id=$1 [R=301,NC]

しかし、うまくいきません。

編集2:

私はなんとか問題を解決しました... htaccessは次のようになります

RewriteCond %{ENV:REDIRECT_STATUS} !=200

RewriteCond %{QUERY_STRING} ^id=([0-9]+)$

RewriteRule ^product.php$ /redirect_old_links.php/ [L]
RewriteRule ^produs/([0-9]+)/([a-zA-Z0-9_-]+)\/$ product.php?id=$1 [L]

PHPコードは次のようになります。

<?
    include "_storescripts/connect_to_mysql.php";
    error_reporting(E_ALL);
    ini_set('display_errors', '1');

    if (isset($_GET['id'])) {
        $produs = $_GET['id'];

        $sql =  mysql_query("SELECT nume_produs FROM products WHERE id='$produs'"); // Chose the product

        // ------- We check if it exists ---------
        $existCount = mysql_num_rows($sql); // Count

        if ($existCount == 1) {
            while($row = mysql_fetch_array($sql)){
                $nume_brut = $row["nume_produs"];
                $nume = explode(" ", $nume_brut);
            }
            $nume_final = strtolower($nume[0]."-".$nume[1]);
            $name = urlencode($nume_final);
            header("location: http://www.shinylook.ro/produs/$produs/$name/", TRUE, 301);
        }
        else {
            echo ("This product id does not exist!");
            exit();
        }
   }
?>

誰かが間違いを見つけた場合 (私はこのドメインに不慣れです)、私はそれらを聞いて非常に嬉しく思い、これをより良く行う方法を学びます...

4

1 に答える 1

2

古いリンクを新しい URL にリダイレクトして、新しいリンクをブログなどに貼り付けるときに新しいリンクを使用できるようにしたい場合があります。

sを使用する場合RewriteRule、Apache はリダイレクトの他の部分を実行するために名前の残りを推測できません。

それを削除することはできます。
produs/58/saboti-dama/ -> product.php?id=58
しかし、逆の操作を行うには、どこから名前を取得するのでしょうか?

このためredirect_old_links.phpに、新しい場所にリダイレクトするだけのファイルを作成する必要があります:
http://php.net/manual/en/function.header.php

例:

ユーザーの訪問
product.php?id=58

RewriteRule product.php?id=([0-9]+) redirect_old_links.php?id=$1 [L]

redirect_old_links.php

mysql_select("SELECT name FROM PRODUCTS WHERE ID = ".$_GET["id"]);
// the above line is just so you get the point,
// please create a proper query with PDO and proper escaping

$id = urlencode($product_id);
$name = urlencode($product_name);

header("Location: produs/$id/$name/");

申し訳ありませんが、私は長い間 PHP を使用しておらず、関数のドキュメントを自分で確認する必要があります。mysql_select/fetch 手順を覚えていません。Urlencode も間違っている可能性があります。

しかし、あなたが要点を理解してくれることを願っています。

于 2012-07-14T07:48:25.957 に答える