特定のリファラーのみリダイレクトでURLを指定したい(.htaccessの書き方)
自分の管理外の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つずつ書きます。
よろしくお願い申し上げます。
回答(6件)
- 最新から表示
- |
- 回答順に表示
- |
- ベストアンサーのみ表示
No.6ベストアンサー20pt
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だけリダイレクトかけます。
ありがとうございました!!
No.5ベストアンサー10pt
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
詳しく無いためこれ以上は解りません。
ここに書くためだけに登録したのでポイントなどは不要です。
同じ問題に詰まっているこちらの人にも色々やってもらいましたが、駄目みたいですね。
逆にお手数掛けてしまい申し訳ありません。
で、検索したところ、↓のURLに解決方法が書いてありました。
http://www.ksknet.net/apache/rewritecond_rew.html
RewriteCondで条件を書いて、RewriteRuleでリダイレクトを指定できるようです。
そうですか。失礼致しました。
ちなみに、今リファレンス確認したら
> Header set Status: ・・・
> Header set Location: ・・・
の途中の":"(コロン)は不要でしたが、これは関係無いですか?
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が返ってきました・・・
こういう感じでは利きませんか?
すみません。下記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 …
- 最新から表示
- |
- 回答順に表示
- |
- ベストアンサーのみ表示











