記事内に広告が含まれています

【ワレコのJavaScript】クエリー文字列を引き継いだまま別サイトへリダイレクトする方法【WEBプログラミング】

この記事は約8分で読めます。
スポンサーリンク
ワレ子
ワレ子

久しぶりにWEB関連の話題だ。

では本題に入ろう。

スポンサーリンク
スポンサーリンク

クエリー文字列を引き継いだまま別サイトへリダイレクトしたい

WEBサイトにアクセスが有った場合に、他のサイトへリダイレクトさせたい場合がある。

例えば、

https://www.wareko.net/old_site/index.html

は既にサービスを停止している。

もしold_siteへのアクセスが有った場合には、以下の新サイトへリダイレクトさせたい。

https://www.wareko.net/new_site/index.html

そう言う状況は良くあるだろう。

ここで問題になるのがクエリー文字列の扱いだ。

クエリー文字列を無視してリダイレクトする

もし単純にやりたいなら old_site/index.html に以下のような簡単なhtmlを記述しておけば良いだろう。

<head>
  <meta http-equiv="Refresh" content="0; URL=https://www.wareko.net/new_site/">
</head>

コード クエリー文字列を無視してリダイレクトする index.htmlファイルの中身

この場合、もし以下のようなクエリー文字列(URLパラメータとも言う)がURLに連結されていたとしても、それらは無視して新サイト new_site/index.html が開く

https://www.wareko.net/old_site/index.html?aaa=単語1&bbb=単語2

 

.htaccessファイルでクエリー文字列も引き継いだままリダイレクトさせる 

では、クエリー文字列も引き継いだままリダイレクトさせるにはどうすれば良いか?

まず最初に思いつくのは .htaccessファイルを編集してredirectの設定を追加する。その時、クエリー文字列も引き継ぐように記述をすれば良いのだ。

.htaccessファイルは良く知られているようにウエブサーバーに各種の制御を指示するためのファイルだ。

特定のアドレスからのアクセスを許可するとか拒否するなども記述出来る。

.htaccessファイルの記述に関してはややこしいで各自勉強して頂くのが良い。

クエリー文字列を引き継いだままリダイレクトするには、恐らくこの.htaccessファイルの方法が最も一般的な方法であり、正統派の方法だと思う(ワテの経験で)。

ところが、ワテの場合は.htaccessファイルなんて滅多に編集しないし。

そう言う場合はネット情報に頼るのが良い

キーワード RewriteRule redirect with query string

でGoogle検索したみたら、以下のサイトがヒットした。

How do you redirect URLs with a query string to another host?
This htaccess snippet is supposed to redirect myhost.com/?p=1&preview=true to alt.myhost.com/?p=1&preview=true RewriteEn...

このサイトに質問を投稿している人は以下のようにリダイレクトさせたいとの事だ。

旧サイト myhost.com/?p=1&preview=true
 ↓
新サイト alt.myhost.com/?p=1&preview=true

つまり、新旧サイトのホスト名が変更になっいるが、クエリー文字列はそのまま引き継いでリダイレクトさせたいとの事だ。

回答は以下の通り。

RewriteCond %{HTTP_HOST} !^alt\.myhost\.com [NC]
RewriteCond %{HTTP_HOST} !^$
RewriteRule ^/?(.*) http://alt.myhost.com/$1 [L,R,NE]

う~ん、さっぱり分からん。

正規表現を使ってパターンを記述してあるが、自称正規表現の初段レベルのワテですら、直ぐには理解出来ない。

もしこの回答を流用するなら myhost.com や alt.myhost.com の部分を自分用にカスタマイズして .htaccessファイルを編集しても良いが。

でも今回は .htaccessファイルを編集するのはやめておく。

その理由は、.htaccessファイルはサイトのセキュリティにも関係するので、素人が安易に編集して間違った設定をするとセキュリティホールを作ってしまう可能性もあるからだ。

JavaScriptでクエリー文字列も引き継いだままリダイレクトさせる 

次はJavaScriptを使ってクエリー文字列も引き継いだままリダイレクトさせる方法を試した。

その結果、以下のような簡単な index.html ファイルを作成しておいて、old_site/index.html に保管しておけば new_site/index.html にクエリー文字列も引き継いだままリダイレクトに成功した。

<!DOCTYPE html>
<html>
<head>
    <script>
	/* 
		index.html?q=コーヒー豆+マンデリン

		を

		https://www.google.co.jp/search?q=コーヒー豆+マンデリン

		へリダイレクトするサンプルhtml
	*/

		var queryString=location.search;
		alert('queryString '+queryString);
		alert('リダイレクト先 '+'https://www.google.co.jp/search'+queryString);
		window.location = 'https://www.google.co.jp/search'+queryString;
	</script>
</head>
<body>
</body>
</html>

コード JavaScriptを使ってクエリー文字列を引き継いでリダイレクトする index.htmlファイル

このコードの要点は以下の通り。
  • クエリー文字列は location.search に入っている。「?」も先頭に付いている。
  • リダイレクトは window.location = ‘https://    新しいURL    ‘  で行ける 
だ。非常に簡単なので分かりやすい。
このindex.htmlを実際に試す手順は以下の通り。
  • Windowsの適当なフォルダにこのhmtlコードを書き込んだindex.htmlファイルを保管する
  • ここではデスクトップに保管したとしよう。
  • SHIFTキーを押しながらindex.htmlファイルをマウス右クリックでメニュー表示する
  • 表示メニューから”パスのコピー”を実行する
  • メモ帳などのエディタを開いてコピー内容をペーストする
ペーストすると
C:\Desktop\・・・\index.html
のように表示されるので、そこに以下のようにクエリー文字列を追加する。
C:\Desktop\・・・\index.html?q=コーヒー豆+マンデリン

この文字列を全部選択してChromeブラウザーのアドレス欄に貼り付けてENTERを押すと以下のようになる。

C:\Desktop\・・・\index.html%3F=コーヒー豆+マンデリン
ここで「?」が勝手に「%3F」に置き換わってしまう。ChromeだけでなくFirefoxやEdgeでも同じ症状だ。置き換わる理由は知らない。
さて、この「%3F」の部分を手作業で「?」に直したら再びENTERを押すと、無事にgoogle.co.jpのサイトにリダイレクト出来てクエリー文字列の「コーヒー豆 マンデリン」も渡るはずだ。
その結果、goole.co.jpで「コーヒー豆 マンデリン」の検索結果が表示されれば成功だ。
なお、上記index.htmlコードには動作を確認するためにalert関数を2個入れている。
実際にこのindex.htmlを使う場合にはalert関数の部分は削除すると良いだろう。
このマンデリンコーヒー豆は美味そうだな。
でも200gで1500円前後なので、ワテがいつもイオンで買うUCCコーヒー豆の倍くらいの値段だ。
まあ飲んでみないことには良し悪しは分からない。ビックリするくらい美味いかも知れないし。
この記事を書いたあとで買ってみるか。
アマゾンで美味しそうなマンデリンコーヒー豆を見る>>>

まとめ

ワレ子
ワレ子

WEBプログラミングの世界は色んなテクニックがある。

新しい技術や手法もどんどん出てくるので勉強をサボると置いてきぼりになる。

ワテの場合も久しぶりにWEBプログラミングを再開したので浦島太郎状態だ。

当記事では、ウェブサイトにアクセスが有った場合に、クエリー文字列を引き継いだまま別サイトにリダイレクトする手法を紹介した。

一般的な手法は .htaccessファイルを編集してApacheやIISなどのウエブサーバーに指示をする手法だろう。

しかし .htaccessの編集には正規表現の知識が必要だし、普通の人は(ワテも).htaccessの編集なんて滅多にやらないので難しい。

そこでもっと分かりやすい方法としてJavaScriptを使ってクエリー文字列も引き継いだままリダイレクトする手法を紹介した。

紹介したと言うよりも、ワテも今までに幾つかのウェブサイトを作っていて、古いサイトで廃止したものもあるので、旧サイトへのアクセスを新サイトへリダイレクトする必要に迫られたのだ。

そこで必死でネット検索して、この記事にまとめたJavaScriptの手法を覚えたと言うのが正しい。

当記事で紹介した手法にもし何か間違いなどありましたらお知らせ下さい。

あるいは、より良い手法があるなどの情報も歓迎です。

(続く)

スポンサーリンク
コメント募集

この記事に関して何か質問とか補足など有りましたら、このページ下部にあるコメント欄からお知らせ下さい。

HTMLJavaScriptWEB
スポンサーリンク
シェアする
warekoをフォローする
スポンサーリンク

コメント