- ベストアンサー
特定のリファラーのみリダイレクトで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.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] ----------------- 私も勉強になりました、有難う御座います。 それでは頑張ってください。
その他の回答 (5)
- inoino123
- ベストアンサー率0% (0/1)
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 詳しく無いためこれ以上は解りません。 ここに書くためだけに登録したのでポイントなどは不要です。
- takeshiaoy
- ベストアンサー率100% (1/1)
同じ問題に詰まっているこちらの人にも色々やってもらいましたが、駄目みたいですね。 逆にお手数掛けてしまい申し訳ありません。 で、検索したところ、↓のURLに解決方法が書いてありました。 http://www.ksknet.net/apache/rewritecond_rew.html RewriteCondで条件を書いて、RewriteRuleでリダイレクトを指定できるようです。
- takeshiaoy
- ベストアンサー率100% (1/1)
そうですか。失礼致しました。 ちなみに、今リファレンス確認したら > Header set Status: ・・・ > Header set Location: ・・・ の途中の":"(コロン)は不要でしたが、これは関係無いですか?
- takeshiaoy
- ベストアンサー率100% (1/1)
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が返ってきました・・・
- takeshiaoy
- ベストアンサー率100% (1/1)
こういう感じでは利きませんか? すみません。下記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_setenvif.html#setenvifnocase http://httpd.apache.org/docs/2.2/ja/mod/mod_headers.html#header
お礼
ご返信ありがとうございました。遅くなってすみません。 お書きいただいた通りで、特定のリファラーだけのリダイレクトができました! 会社の人が何も考えずにサイトを移転してしまったので、リンク間違いがたくさんできてしまい困っていたのです。(後になって、リンク元にURL変えてくださいって言いにくいですし) いろいろと調べていただいたようで、ありがとうございました。 さっそく今から特定のURLだけリダイレクトかけます。 ありがとうございました!!