すべてのカテゴリ » インターネット・パソコン » 技術・プログラミング

質問

終了

HPで、トップ以外のページに(ブクマなどで)直接来られた時に強制的にトップに転送させるツールはないでしょうか?
以前忍者であったのですが今はないのです。
過去にhtmlだったかを組むのでやったら上手くいきませんでしたので、何か便利ツールあれば教えて欲しいです。

===補足===
上手く説明が伝わらずすみません。
つまり、特定のトップ以外のページをブックマークされていた場合、強制的にトップへと移動させたいのです。
↑言い直したものの同じ内容ですね(汗)

リダイレクトというのは、引越しなどの際に別のページに誘導するというもののようなのですが、そういう意図ではないのです。
トップを経由せずに直接Aのページにではなく、トップからしか来れなくさせたいのです。
つまり、ズル(?)してAのページを直接ブクマされたのを、ちゃんとルール通りにトップからしか入れないようにさせたい、ということです。

説明下手ですみません。

  • 質問者:そーだん
  • 質問日時:2009-01-14 10:03:41
  • 0

回答してくれたみんなへのお礼

物凄く詳しい説明をありがとうございます。

ちなみにAのページには解析をつけていなく(さすがにそこまでするといやらしい感じがするので)ので、1人1人を対象にするのも大変かな…と思い、
忍者過去ツールのように一括で、指定ページ以外からの訪問は全て指定ページに飛ばす、というのがしたかったのですが、そういうツールはないようなのですね^^;

残念ながら私は自分でそこまでの専門的な対処ができないので、ツールに頼りたかったので、今回は諦めることにしました。
ベストは、詳しい説明をいただいたお2人につけたいのですが、両方とも専門的でどちらが良い(ベスト)のかが分からず…ということで、すみません><

並び替え:

補足を読んでの回答です。それを実現するにはサーバの.htaccessを直接編集するしかなさそうです。私はエディタで直接編集してしまうので、それを作る事の出来るツールについては知識がありません。その上で、説明をします。お役に立てなかった御免なさいです。

ちなみにリダイレクトは、お引っ越しだけでなく、例えばアクセスが許可されていない頁を見ようとしたり、ページの存在しないアドレスを指定された時にも発動可能な手法で、指定されたリクエストを別のリクエストに置き換える為に使用します。

JavaScriptやクライアントプル(ヘッダの<META HTTP-EQUIV>で指定する)の場合は一般的なリダイレクトとしては手軽なのですが、一旦頁が読み込まれてから発動するので少々そーさんさんの目的としては弱いかも知れませんね。特にJavaScriptの場合は設定が有効な場合にしか機能しませんし、画像ファイルの直接リンクや直行便を防ぐ事も出来ません。

サーバの.htaccessを使えば無断で内側の頁へ直接リンクしている場合や画像のみ直接リンクされた場合やブックマークから直行して来た場合にも使用できますが、レファラ(何処からアクセスされているか)が確実に取れる場合なら良いのですが、ブラウザによってはレファラを返さなかったり、ノートンシリーズ等のセキュリティソフトによってレファラが削除されてリクエストが来る場合も有るので確実性は低くなります。レファラにはこのような弱点がある事を認識した上で利用してください。

いずれにしても、このレファラを見て直行便なのかトップから経由してきたのかを判断する方法以外には直接アクセスを禁止する方法は無いと思います(私の知識が古くて、実は最近はもっと良い方法が有るかも知れませんが)。

で、その方法ですが、サーバ上の『.htaccess』ファイルに以下の記述をします(httpと書くとSooda!の自動編集リンクが煩わしいのでhtttpと書きますのでhttpに読み替えてください)。

ブラウザからのレファラ環境変数を参照し、何処から飛んできたかを判断してアクセスを禁止します。以下の例の場合はレファラに『htttp://サーバ/ユーザ/』が含まれない(マッチしない)場合はアクセスを禁止する例です。

SetEnvIf Referer "^htttp://サーバ/ユーザ/" access_ok
SetEnvIf Reqest_URI "^/ユーザ/index.htm" access_ok
order deny,allow
deny from all
allow from env=access_ok
ErrorDocument 403 http://サーバ/~ユーザ/index.htm

(サーバ名のドットの前には\でエスケープしてください)
この様にしておくと、指定したURLを含まないレファラの場合は403エラーになるので、403エラーになった場合は最後の行で指定したトップ頁のindex.htmへ自動的に飛ばす事が可能になります。画像等の直接リンクの場合は画像が表示されなくなります。

注意点ですが、
SetEnvIf Reqest_URI "index.htm" access_ok
では、できる事ならばHTTPで指定するドキュメントルートからの厳密なパスで指定してください。大抵は『/~user/index.htm』等で済みますが、状況によってはサーバによって返す値が異なるのでサーバの管理者に聞いてください。

説明が悪くて少々難しくしてしまったかも知れませんね…^^;…御免なさい。

ツールについては、.htaccessの編集が出来るツールでしたらラクチン設定が出来るようになっているものが有るかも知れませんが、今は時間が取れないので探せません…これも御免なさいです。

それ以外の方法だと全てのページをCGI等で作成しておいて、直前のログを見ながら頁を表示させる方法や、クッキーを使用すると言う手も有りますが…これは大変な手間が掛かりますね…^^;。

余談ですが、存在しないページを指定した場合は404エラーになるので
ErrorDocument 404 http://サーバ/~ユーザ/index.htm
を追加しておくと、Not Foundエラーの場合もトップ頁に飛ばす事が可能です。

# 度々修正したので何度もメールが飛んだかと思います。これも御免なさい。

この回答の満足度
  
とても参考になり、非常に満足しました。回答ありがとうございました。

リファラーをチェックして、直リンクをトップにジャンプさせてはどうでしょうか。
リファラーとはリンク元のページのことで、どこから飛んできたのかを示します。
トップページから飛んでくれば、リファラーにはトップページのアドレスが入りますし、ブックマークから直接来た場合には、リファラーは空っぽです。
このリファラーを使って、Javascriptで処理してやります。

例えば、対象がSooda!だったらこんな感じになるかと思います。

<script language="JavaScript">
<!--
function referrerCheck() {
if (!(document.referrer.match(/^http:\/\/sooda\.jp\//))) {
location.href = "http://sooda.jp/";
}
}
// -->
</script>

このプログラムは、リファラーが"http://sooda.jp/"で始まるアドレスだった場合、何もしません。
リファラーが"http://sooda.jp/"で始まるアドレスではなかった場合、"http://sooda.jp/"にジャンプさせます。
「"http://sooda.jp/"で始まるアドレス」としているのは、サイト内のページから飛んできた時にトップページにジャンプしない様にするためです。

あとはbodyのonLoadなどで、referrerCheck()を走らせれば良いかなと思います。

  • 回答者:匿名希望 (質問から2時間後)
  • 1
この回答の満足度
  
とても参考になり、非常に満足しました。回答ありがとうございました。

リダイレクト という用語で検索してみてはいかがでしょうか。

yahooの解説ページです。
http://info.search.yahoo.co.jp/archives/002842.php

===補足===
見当違いの回答をしてしまったようで、どうもすみませんでした。

この回答の満足度
  
やや参考になりました。回答ありがとうございました。

関連する質問・相談

Sooda!からのお知らせ

一覧を見る