新しく質問する

特定のリファラーのみリダイレクトでURLを指定したい(.htaccessの書き方)

役に立った:5件
  • 質問者:chie0918
  • 投稿日時:2009/09/18 11:13
  • 困り度:困ってます
  • 友達に紹介
  • ブログに書く
  • 教えて!gooお気に入り

自分の管理外のWebサイトA,B,Cから"example.com"のトップページへ
リンクされています。リンク元のURLは変更できないので、A,B,Cの
特定のページからのリファラーのみ"1.html"へリダイレクト(301)
したいと思っています。※URLは全てダミーです

リンク元
http://site-a.jp/a.html
http://site-b.jp/b.html
http://site-c.jp/c.html

現在のリンク先
http://example.com/index.html

移転先
http://example.com/1.html


【私が書いた.htaccessの内容】
SetEnvIf Referer "^http://site-a\.jp/a\.html" ref_a
Redirect permanent /index.html http://example.com/1.html env=ref_a

これではエラー500が返ってしまいだめでした。移転前と移転先は
同じなので、できればA,B,Cをまとめてセットして、リダイレクト
の行は1つにしたいと思っています。無理なら1つずつ書きます。

よろしくお願い申し上げます。

この質問への回答は締め切られました。
このQ&Aは役に立ちましたか?(役に立った:5件)
  • 参考になった:1件

No.6ベストアンサー20pt

  • 回答者:takeshiaoy
  • 回答日時:2009/09/18 19:51

No.5さん
フォローありがとうございました。(成功したようで安心しました。)
No.5さんの場合、元々のリクエスト「http://example.com/」の場合に限定されていましたので、RewriteRuleの直後が「^$」となりました。

質問者様の場合は、元々のリクエストが「http://example.com/index.html」となっていますので、「index\.html」も付けた方がよさそうです。
また、3つのURLも以下のような指定で行けるかもしれません。

------------------
RewriteEngine on
RewriteCond %{HTTP_REFERER} site-(a¥.jp/a|b¥.jp/b|c¥.jp/c)\.html [NC]
RewriteRule ^(index\.html)?$ /example.com/1.html [R,L]
-----------------

私も勉強になりました、有難う御座います。
それでは頑張ってください。

通報する

この回答へのお礼

ご返信ありがとうございました。遅くなってすみません。
お書きいただいた通りで、特定のリファラーだけのリダイレクトができました!

会社の人が何も考えずにサイトを移転してしまったので、リンク間違いがたくさんできてしまい困っていたのです。(後になって、リンク元にURL変えてくださいって言いにくいですし)

いろいろと調べていただいたようで、ありがとうございました。
さっそく今から特定のURLだけリダイレクトかけます。
ありがとうございました!!

  • 参考になった:1件

No.5ベストアンサー10pt

  • 回答者:inoino123
  • 回答日時:2009/09/18 19:27

1さんの書かれた困っていた人です。
私は下記の内容で行けました。
---
RewriteEngine on
RewriteCond %{HTTP_REFERER} site-a¥.jp/a\.html [NC]
RewriteRule ^$ /example.com/1.html [R,L]
---
ポイントは3行目" ^$"で、"/"や"index.html"を指定しません。
複数の場合は連続して書けば良いのかも知れません。

私の環境は、さくらサーバーのライトプランです。
> Apache/1.3.41 (Unix) mod_ssl/2.8.31 OpenSSL/0.9.8e

詳しく無いためこれ以上は解りません。
ここに書くためだけに登録したのでポイントなどは不要です。

通報する

  • 参考になった:1件
  • 回答者:takeshiaoy
  • 回答日時:2009/09/18 17:07

同じ問題に詰まっているこちらの人にも色々やってもらいましたが、駄目みたいですね。
逆にお手数掛けてしまい申し訳ありません。

で、検索したところ、↓のURLに解決方法が書いてありました。
http://www.ksknet.net/apache/rewritecond_rew.html

RewriteCondで条件を書いて、RewriteRuleでリダイレクトを指定できるようです。

通報する

  • 参考になった:1件
  • 回答者:takeshiaoy
  • 回答日時:2009/09/18 16:31

そうですか。失礼致しました。

ちなみに、今リファレンス確認したら
 > Header set Status: ・・・
 > Header set Location: ・・・
の途中の":"(コロン)は不要でしたが、これは関係無いですか?

通報する

  • 参考になった:1件
  • 回答者:takeshiaoy
  • 回答日時:2009/09/18 15:27

No.1、追記と修正です。

結局のところ、"環境変数を指定できるディレクティブは限られている"と書いてありましたので、環境変数の指定が出来る「Header」を使えば動くのでは?という事です。

先ほどはURLの絞り込みを付け忘れてました。
三つのサイトを同時にという場合でも、条件部分だけ追加すれば出来そうな気がします。

SetEnvIfNoCase Referer "^http://(site-a\.jp/a|site-b\.jp/b|site-c\.jp/c)\.html" ConditionMatched

<FilesMatch "/index.html">
Header set Status: "301 Moved Permanently" env=ConditionMatched
Header set Location: "http://example.com/1.html" env=ConditionMatched
</FilesMatch>

※何のテストもしていないコードですので、参考までにお願い致します。
※実は、ちょうど同じタイミングで同じ問題に詰まっている人から質問されたもので、ついでにと言っては失礼ですが、検索で見つかったここへ回答致しました。

通報する

この回答への補足

ん~、だめみたいです。500が返ってきました・・・

  • 参考になった:1件
  • 回答者:takeshiaoy
  • 回答日時:2009/09/18 14:35

こういう感じでは利きませんか?
すみません。下記URLのリファレンス見ながら書いてみただけです。.htaccessとか使った事が無いので間違えていたら無視して下さい。

SetEnvIfNoCase Referer "^?http://site-a?\.jp/a\.html" ConditionMatched
Header set Status: "301 Moved Permanently" env=ConditionMatched
Header set Location: "/hoge" env=ConditionMatched

参照したURL
http://httpd.apache.org/docs/2.2/ja/mod/mod_sete …
http://httpd.apache.org/docs/2.2/ja/mod/mod_head …

通報する

  
このQ&Aは役に立ちましたか?(役に立った:5件)

このページのトップへ

Facebook公式ページ

公式Twitter