リダイレクトは ブラウザでページを勝手に別のページに飛ばされることです

アクセスしたページを見たいのに勝手に広告ページに飛ばされる
そんな経験ありませんか? ありませんよね
私もこれまではページURLが変わったときくらいにしかリダイレクトされることはなかったです
xxxx.jpからxxxx.comになる とかです


ですが 今回 携帯で見ていたページをパソコンで見ようとしたらアフィリエイトをクリックしたような広告ページに飛ばされてしまいました
HTMLは送られてきているようだったのでリダイレクトされないようにソースを開いて読んでましたが 携帯で読んでるよりページ取得は早くなりましたが 読みやすさが悪化しました

パソコンでアクセスされたくないのか知らないですが迷惑すぎですよね


そのときのリダイレクト方法が初めて見る方法だったので今回はリダイレクトのお話です

サーバ側

どれもサーバ側といえばサーバ側でリダイレクトしてよ って命令を出してるんですがHTMLを送らない方法ということでサーバ側です

「ページよこせー」 っていうサーバ側へのリクエストに対して 「ほらよ」とHTMLをもらえるときがあれば 「ないよ」と404 FILE NOT FOUND なんてのが返ってくることや 「今無理」と50xなエラーが返ってくるときもあります

その中の「ページこっちに変わったから」と3xxでページの移動先だけを教えてくれるものがあります
これがサーバ側リダイレクトですね

PHPだとheader関数を使って
header("Location:http://xxx.com/xxxx/xxxx.html");
とか書いておけばできたと思います

これだとHTMLはもらえてないのでもらえないしリダイレクトを拒否できません

クライアント側

次がクライアント側
HTMLはもらえるけど もらったHTMLを読んだ結果リダイレクトするリダイレクトです

JavaScript

JavaScriptにリダイレクトが書かれています
今のページを表すlocation変数を書き換えればリダイレクトできます
location.href = "http://xxx.jp/xxxx/xxxx.html"

他にもwindow.openが使えます
window.open("http://xxx.net/xxxx.xxxx.html", "xxxx")
これで 新しいウィンドウまたはタブでURLを開きます
2つ目の引数でウィンドウ名を指定できるので自分自身を設定すれば自身のタブのページを移動してリダイレクトにできます

この方法はJavaScriptなのでリダイレクトしたくなければJavaScriptをオフにすればいいです

HTMLタグ

HTMLタグにもそういう機能をもったものがあります
これが今回初めて見た方法です

metaタグのrefresh属性を使います
<meta http-equiv="refresh" content="5;URL=http://xxx.org/xxxx/xxxx.html">
5と書いているところがリダイレクトまでの秒数で 0にすれば開いてすぐにリダイレクトします

さすがHTML5こんな機能まであるのか~ と思ったのですが昔からある機能でかなり前から非推奨らしいです
でも一応廃止にはなってないようです


調べてみたのですが Chromeにはこのリダイレクトを止める設定はないそうです

HTMLタグならJavaScriptで消せばリダイレクトは防げるんじゃないの と思いましたが そうはいきませんでした
DOM構築が終わった時点でリダイレクトが確定しているようでChrome拡張機能のJavaScript埋め込みでmetaタグを削除したんですがリダイレクトしてしまいました

レスポンスが返ってきてから DOMを作るまでにレスポンスとして受け取ったHTMLを書き換えられれば可能だと思うんですがChromeのAPIのページを見ていてもそれらしいことができるものが見当たりません
拡張機能を作る上では レスポンスを書き換えられれば色々とできて便利になると思うのに残念です