url パラメーターをセレクションに追加するだけで、常にすべての内部リンクで見つかるようにすることができます。変更が多すぎるため、そうしたくないと思います。
いくつかの代替案:
アイデア 1:
初期選択をセッション内または Cookie 内に保存します。また、選択を保持するすべてのページにオプションの url パラメータを追加します。すべての内部リンクを変更しないようにするには、選択 URL パラメーターが指定されているかどうかをサーバー側で確認してください。そうでない場合は、(セッション/Cookie に従って) url パラメータを追加して、すぐに同じ URL にリダイレクトします。このようにして、すべての内部リンクをどこでも変更することなく、url パラメータが常に表示され、ユーザーは引き続きリンクを共有できます。
$_SESSION['sel']
実装のために、セッション変数がで、オプションの URL パラメータが であると仮定しましょうpsel
。サイト内のすべてのページが php 経由で提供されていると仮定しましょう。次の php 行がすべてのページの上部に表示されます (個別の php ファイルに配置して、各ページに含めることができます)。
if (!isset($_REQUEST['psel']))
{
header('Location: '.$_SERVER['REQUEST_URI'].'&psel='.$_SESSION['sel']);
exit;
}
これは疑似コードです。私は iPad を使用しているので、少し短くて完璧でない場合はご容赦ください。この行は、URL パラメーターが定義されているかどうかを確認し、定義されていない場合は (同じページに) リダイレクトし、セッション変数に従って定義します。このように、URL パラメータを含まない内部リンクがある場合でも、このリダイレクトによって追加されます。リクエスト uri に小さなバグがあり?
ます。修正させていただきます。
このコードはすべての内部リンクを変更するわけではなく、次のことだけを行います: 内部リンクが訪問され、URL パラメーターが省略されている場合 (通常はそうであるように)、このコードは、パラメーターとリダイレクトなしでページが表示されないようにします。パラメータと同じページに。
もう 1 つの重要なコードは、URL パラメータが定義されている場合に備えて、セッション変数を変更することです。これは、上記のコードにこのelseブロックを追加することで実行できます:
else $_SESSION['sel'] = $_REQUEST['psel'];
このように、URL が 2 人のユーザーによって共有されている場合、常にpsel
URL パラメータが含まれ、新しいユーザーが最初にアクセスしたときに、それに応じてセッション変数が設定されます。
アイデア 2:
選択ごとに「偽の」ディレクトリを作成します。たとえば、サイトがhttp://example.com/index.phpだったとします。この場合、http://example.com/sel1/index.phpとhttp://example.com/sel2/indexになります。 php。これらのディレクトリは実際のものではなく、.htaccess の書き換え (または FS のシンボリック リンクでさえも) を使用すると、実際には元のファイルを指します。ただし、パスにこの魔法のパラメーターが含まれるようになりました。これは、すべての相対リンクでパスが同じままであるため便利です。つまり、すべての内部リンクを変更する必要はありません。現在の選択にアクセスする必要がある場合は、現在の URL のパスを解析することで簡単に取得できます。
このアイデアは、リダイレクトなしで同じことを達成するので、少し良いと思います。シンボリック リンクで説明するのが最も簡単ですが、これは .htaccess 書き換えルールでも実行できることに注意してください。Linux のシンボリック リンクは、別のパスにリンクするパスです。次のコンソール コマンドを実行すると (通常はサーバーで SSH を使用):
ln -s . sel1
ln -s . sel2
内に 2 つのディレクトリが作成されます。(ローカル ディレクトリ)、sel1 および sel2 という名前ですが、これらは元の現在のディレクトリへのリンクにすぎません。この現在のディレクトリが Web サーバーのドキュメント ルートである場合、以下にアクセスすることになります。
http://example.com/sel1/index.php
実際にアクセスします:
http://example.com/index.php
これはディレクトリのコピーではないことに注意してください。ローカル ディレクトリ内の index.php やその他のファイルに変更を加えると、これらの変更も反映されます/sel1
。/sel2
これはどのように役立ちますか? 通常のサイトにアクセスする代わりに、選択 2 を表示したい場合は URL を使用しますhttp://example.com/sel2/index.php
。シンボリック リンクのため、この URL は元の Web サイトとまったく同じように動作しますhttp://example.com/index.php
。
ここで、選択 2 を表示しているかどうかを php で確認したいとします。変数$_SERVER['REQUEST_URI']
を調べるだけで、パスが含まれているかどうかを確認/sel2
できます。
通常、これらのパスは相対パスであるため、すべての内部 URL 間で永続的なパスが維持されます。