2

現在、自分の Web サイトにスラッグ システムを実装しています。無効なスラッグを、データベースに保存されている正しいスラッグにリダイレクトする予定です。例えば

http://example.com/11/wrong-slug

db をヒットし、11 のスラッグが間違っているかどうかを確認します-301 リダイレクトを行わない場合はスラッグ

http://example.com/11/right-slug

301 を検出し、無効なリンクをたどったことをユーザーに通知する

できればPHPを使用して301リダイレクトを識別できるので、ユーザーにブックマークなどを更新するように依頼できますか.

ありがとう、ジェイミー。

4

5 に答える 5

5

または、URLにGETパラメーターを追加して(気にしない場合)、PHPスクリプトで確認することもできます。何かのようなもの:

http://example.com/11/right-slug?corrected-from=http://example.com/11/wrong-slug

同じように、セッションまたはCookieを使用できますが、検出後にそれらを削除するように注意する必要があります。

于 2009-12-26T13:22:27.437 に答える
2

いくつかの解決策が思い浮かびます。

  1. get_headers() で試すことができますああ、それはあなたが望むものではないURLにリクエストをディスパッチします

  2. とにかく同じマシンからリダイレクトしてリダイレクトをテストしているので、間違ったスラッグに関するメッセージをユーザーのセッションに書き込んで、次にビューテンプレートがレンダリングされるときにそれを表示することができます。多くのフレームワークにはフラッシュメッセンジャーコンポーネントがあり、これを簡単に実行できます。たとえば、Zend Frameworkでは、コントローラーアクションで次のコードを使用します。

    $ flashMessenger = $ this-> _ helper-> getHelper('FlashMessenger'); $ flashMessenger-> addMessage('最後のリクエストで何かをしました');

  3. 間違ったスラッグが見つかったときにすぐにリダイレクトする代わりに、間違ったスラッグについてユーザーに通知するビューテンプレートをレンダリングしてから、テンプレートからのメタまたはJavaScriptリダイレクトを使用します。必要に応じて、テンプレートへの適切なスラグを使用してプレーンリンクを作成することもできます。

  4. そして最後に、 header()を介してリダイレクトにカスタムヘッダーを挿入することもできます。これは、スクリプトから読み取ることができます。 ブラウザがサーバーからリダイレクトを取得すると失われるため、どちらも機能しません

于 2009-12-26T13:11:41.250 に答える
1

解決策は、「新しい」ページでチェックする$_SERVER['HTTP_REFERER']ことです。設定されていて「古い」ページに対応している場合は、ユーザーがリダイレクトされている可能性があります。つまり、メッセージを表示する必要がある場合があります。

ただし、リファラーはユーザーのブラウザーによって送信され、無効にすることも偽造することもできることに注意してください。したがって、リファラーを使用してエクスペリエンスを向上させることはできますが、重要なことをリファラーに依存してはなりません。

于 2009-12-26T13:15:16.447 に答える
0

実用的な解決策を見つけました:

  • セッションを開始します。

  • セッションを確認し、$ _ SESSION ['INVALID_SLUG']が存在する場合はメッセージを表示し、セッションの設定を解除します

    そうしないと

  • データベースからスラッグを取得します(例:/ 11 / right-slug)

  • 現在のURIを取得します。例:/ 11 /wrong-slug

  • 比較し、異なる場合は$ _SESSION ['INVALID_SLUG']を設定し、正しいページにリダイレクトします

フィードバックはありますか?これでは、301リダイレクト自体は検出されず、リダイレクトに関連付けられたトリガーが検出されます。

すべての助けをありがとう。

于 2009-12-26T14:19:04.903 に答える
0

唯一の便利なオプションはクッキーを使うことだと思います。

間違ったスラッグを持つURLが要求された場合、スラッグなしでそのURLにCookieを設定します。

$path = substr($_SERVER['REQUEST_URI'], 0, strrpos($_SERVER['REQUEST_URI'], '/')+1);
setcookie('wrong-slug', 1, 0, $path);

次に、そのようなCookieが存在するかどうかをテストし、メッセージを表示します。

if (isset($_COOKIE['wrong-slug'])) {
    echo 'The location of this resource has changed. Please update your bookmarks.';
}
于 2009-12-26T14:28:17.413 に答える