1

アドレスを変更してsefにしましたが、リンクの一部は古く、一部は人々によって共有されていました。そこに入ろうとすると、500の内部サーバーエラーが表示されます。ご想像のとおり、必要です。それらを新しいURLにリダイレクトするには、静的にリダイレクトする方法は知っていますが、動的にリダイレクトする方法はわかりません

たとえば、私の古いリンクはmywebsite.com/profile/1で、新しいリンクはmywebsite.com/profile/1/johnny-walkerです。

誰かが私の古いリンクを見ようとした場合、私は彼らに私の新しいリンクにリダイレクトしてもらいたい

私の古いルールは:

RewriteRule ^profile/(.*)/?$ profile.php?id=$1 [L] 

私の新しいルールは:

RewriteRule ^profile/([0-9]*)/(.*)/?$  profile.php?id=$1&slug=$2 [QSA,L]

ありがとうございました

4

1 に答える 1

1

それは男の名前のナメクジです、それはデータベースから来ています、私はそれをgetexcで呼びます。ユーザーが登録すると、それは自動的に作成されます、私はそれを例として書きました

私が言いたいのは、あなたが持っていた1のは(id)だけだった前です。そのIDから、どうやってナメクジを手に入れますか?データベースから取得できる場合は、両方のルールを保持する必要があります(いくつかの小さな変更があります)。

RewriteRule ^profile/([0-9]+)/([^/]+)/? profile.php?id=$1&slug=$2 [QSA,L]
RewriteRule ^profile/([0-9]+)/? profile.php?id=$1 [L] 

次に、profile.php次のことを行う必要があります。

  1. ファイルの先頭で、値があるかどうかを確認します。$_GET['slug']値がある場合は、通常のようにページを上に移動します
  2. スラッグ値がない場合は、$_GET['id'](サニタイズされた)値を取得し、データベースからスラッグを取得する必要があります
  3. このheader()関数を使用して、リダイレクトを作成します。

    header('HTTP/1.1 301 Moved Permanently');
    header('Location: /profile/' . $id . '/' . $slug);
    exit();
    

    ここで、$idはIDであり$slug、はデータベースからのスラッグ値です。

これにより、誰かがリクエストしたときに、正規URLを作成してリダイレクトを行う前と同じようにhttp://mywebsite.com/profile/1、書き換えルールがそれをprofile.phpに送信します。

于 2012-10-22T02:18:58.667 に答える