A.htm に対してアクセスがあるとして、それが B.htm からのリンクでは
ない場合は B.htm を表示させたいですが、これを「 .htaccess 」で実現
する方法を教えてください
つまり、 A.htm を表示できるのは、 B.htm 内のリンクをクリックしたと
きだけ、ということを「 .htaccess 」で実現したいのです
なお、「 .htaccess 」をどこに置くのかも教えてください
B.htm と同じディレクトリなのか?それとも root( でしたっけ? )なの
か?
また、この手の参考になるページで、平易な言葉を多用するなど素人でも
解りやすいページを教えていただけると、ありがたいです
mod_rewrite が使える
A.htm B.htm が同じディレクトリにある
ブラウザがチャンと referer を返す(返さない場合もあるので)
という前提で、
RewriteEngine On RewriteCond %{HTTP_REFERER} !B.htm RewriteRule A.htm B.htm
を記述した .htaccess を A.htm と同じディレクトリへ置きます。
意味は、直前に見ていたページが B.htm でないなら、
A.htm を B.htm に書き換える
というものです。
残念ながら、動作確認は取れていません。
.htaccess は本家のも目を通しておくべきでしょうから
http://httpd.apache.org/docs/2.1/ja/howto/htaccess.html
こちらの方が易しいでしょうか
http://mikeneko.creator.club.ne.jp/~lab/web/htaccess/
mod_rewrite については
http://www.net-newbie.com/trans/mod_rewrite.html
ゆっくりと読めば分ると思いますが、もう少し柔らかいのは
http://tech.bayashi.net/svr/doc/apache/mod_rewrite.html
はどうでしょう。
結果から言うと、リダイレクト?されているみたいですが、「 ファイル
が無い 」というメッセージがサーバーから返りました
詳しく言うと・・・
・ 質問の A.htm は、 cgi-bin フォルダ内の A/A.cgi です
・ 同じく B.htm は、 public_html フォルダ内の B/B.htm です
・ public_html は最上位フォルダで、 cgi-bin フォルダは public_html
フォルダの直下にあります
・ サーバーはレンタルですが、独自ドメインを取得しています
でもって、「 http://ドメイン名/ 」では「 http://実体のサーバー名
/public_html/ 」に「 URL フレーム転送 」する設定をしてあります
つまり、以下のようになります
A.cgi = http://ドメイン名/cgi-bin/A/A.cgi
B.htm = http://ドメイン名/B/B.htm
なお、 public_html フォルダの直下にある index.htm はフレームページ
になっていて、 B.htm はそのフレームの一つです
<FRAME src="B/B.htm" …省略…>
なので、以下のように記述しました
RewriteEngine On
RewriteCond %{HTTP_REFERER} !http://ドメイン名/B/B.htm
RewriteRule A.cgi http://ドメイン名/index.htm
でもって、 index.htm にはアクセスしているらしくて、フレームは表示
されます
ところが、全フレーム( と言っても 2 ページだけ )にて「 ファイルが無
い 」メッセージが表示されます
ひょっとして、 URL フレーム転送や index.htm がフレームページになっ
ていることが原因で、各フレームページのパスが変わってしまったのでしょ
うかね??
----------------------------------------------------------------
追記 : 8 月 22 日
末尾に、[ R ]オプションを付けることで解決しました
RewriteEngine On
RewriteCond %{HTTP_REFERER} !http://ドメイン名/B/B.htm
RewriteRule A.cgi http://ドメイン名/index.htm [R]