エス技研

WordPress、CakePHP、PHP、baserCMSなどの Web系システムを中心に情報を提供します!


URL短縮サービス「TTTオンライン(https://ttt.onl)」公開

   

URL短縮サービス「TTTオンライン(https://ttt.onl)」公開

 
URL短縮サービス「TTTオンライン」をリリースしました。
https://ttt.onl
 
URL短縮サービス「TTTオンライン(https://ttt.onl)」公開
 

Googleの URL短縮サービス「Google URL Shortener」の代替を目指して

 
Googleの URL短縮サービス「Google URL Shortener(https://goo.gl/)」は 2019年03月30日に停止しますが、その期限が迫ってきました。(この記事を書いたのは、2019年03月下旬でした。)
 
そのため、新しい「URL短縮サービス」を探していたのですが、なかなかいい感じの URL短縮サービスを見つけることができませんでした。
Googleでさえサービスを終了させてしまう状況であるわけなので、利用し始めるサービスがいつまで続くか分からないと考えると、余計に何を条件に選べばいいのかが分からなくなってしまうのです。
 
また、日本語で提供されているサービスが見当たらなかったことも新しいサービスに乗り換えるのをためらった理由でもありました。
 
 
そんなこんなで、「どうしようか?」と悩んでいたわけですが、「だったら、自分で作ればいいじゃないか!」と思い至り、自分で作ることにしました。
自分で作ったサービスなら、自分の意志でサービスを継続することができますし、たとえ、サービスを終了させる状況が来たとしてもあきらめがつくだろう、と。
 
 

実は日本語の URL短縮サービスもあった

 
ちなみに、国産の URL短縮サービスとして、アナウンスされているサービスもありました。
 
それを知ったのは、サイトの構築を始めてから、何か参考になりそうなサイトを探しているときで、すでに作り始めていましたので、そこから開発を止めるという気持ちにはなりませんでした。
 
ただ、そのサービス、「国産」と書いてはありますが、提供元を示すものが一切ありませんので、本当に日本で作られているものなのかわかりません...
また、利用規約なども書いてありますが、だれと契約するものなのかが分かりませんので、規約として成立していないんですよねぇ...
 
 

URL短縮サービスとは?

 
URL短縮サービスとは、長い文字列の URLを短くしたい、というときに利用するサービスで、入力した長い文字列の URLを短い URLに変換して提供するサービスです。
メールや SNSなどに URLを書き込むときに少しでも短い URLにしたい、という場合などに利用するサービスです。
 
長い文字列の URLが入力されると、それに対するユニークな文字列を割り当てて短縮された URLを生成します。
そして、短縮された短い文字列の URLに対してブラウザからアクセスがあった場合は、サーバのリダイレクト機能を利用して元の長い文字列の URLにリダイレクトさせる、という仕組みのサービスです。
 
Googleを始め、多くの企業が提供していたサービスでしたが、Googleが提供していた URL短縮サービス「Google URL Shortener」は 2019年03月30日に新規で短縮 URLを生成することができなくなります。
「Google URL Shortener」は、新規の生成ができなくなりますが、これまでに生成された URLは当面は維持される模様です。
 
ですが、サービスの停止とあわせて、生成された URLの利用もできなくなるサービスもあり、多くのリンク切れを引き起こすという問題にもなっています。
そのため、恒久的なリンクが必要な場合には利用がためらわれるサービスであるようにも感じます。
 
 

URL短縮サービスの基本的な仕組み

 
URL短縮サービスの基本的な仕組みは、非常に単純です。
 
入力された URLに対して、ユニークな文字列を生成し、.htaccessのリダイレクト機能を使ってリダイレクト設定をする、というだけです。
 
 
下記は生成される .htaccessファイルの一部です。
 

 
上記の場合は、「https://ttt.onl/abcd」にアクセスがあった場合、「http://example.com/123.html」にリダイレクトをする、という設定です。
 
プログラムとしては、入力された URL「http://example.com/123.html」に対して、ユニークな文字列「abcd」を生成して、その情報を .htaccessファイルに出力する、というだけです。
 
今回のシステムは、CakePHP3で作成しましたが、CakePHP3のプログラムでは 50行程度の処理です。
 
 
ただ、サービスとして成立させるためには、登録した情報を削除できるようにしたり、QRコードを表示したり、管理画面から更新、削除したり、ユーザを管理したり、といった機能も必要としますので、もう少しだけプログラムを追加する必要があります。
(とはいえ、基本的なシステムの管理機能は、CakePHP3のフレームワークで構築できるわけなので、追加する機能があると言っても「もう少しだけ」という感じではあります。)
 
 

TTTオンラインはユーザ登録型のサービス

 
URL短縮サービスは、その仕組みから不正に利用される可能性があるため、当サービスではユーザ登録を必須としています。
 
ユーザ登録を行ったユーザに向けてのサービスということで、規約を定め、規約に反した利用をしたユーザに対しては、管理側から一括処理を行える仕組みを整えています。
 
不正利用に対して無防備なサービスを提供していると、サーバ会社やプロバイダーからサービス停止を迫られる可能性があることから、こういった不正利用に対しての仕組みを導入しています。
 
また、不正なサイトなどへのリダイレクトを登録した情報はログとして残りますので、不正な利用は行わないようにお願いします。
 
 

.htaccessのリダイレクトを設定する際の知らなかった設定

 
この URL短縮サービス「TTTオンライン」を作成していて初めて知った、かなりクリティカルな問題を発見しました。
というか、私が知らなかっただけの致命的な知識不足です。
 
今さらながら、.htaccessのリダイレクトを設定する際の知らなかった仕組みです。
 
 
例えば...
下記のようなリダイレクトの設定をしたとします。
 

 
「https://ttt.onl/i」を入力したら「http://example.com/123.html」にリダイレクトする、という設定です。
 
ですが、上記のリダイレクトの記述方法では、「https://ttt.onl/i」でも正しくリダイレクトしますが、「https://ttt.onl/img」でもリダイレクトをしてしまうのです。
そのため、「https://ttt.onl/img/test.jpg」のように、フォルダ名が「i」で始まる画像フォルダへのリンクがすべてリダイレクトされる、ということになるわけです。
 
実際に「TTTオンライン」の開発の検証中に、まさにその問題に遭遇してしまいました。
 
 
ただ、これについての解決方法は簡単です。
 

 
上記の通り、「^i」を「^i$」とすれば解決します。
 
これによって、「https://ttt.onl/i」だけが正しくリダイレクトするようになります。
 
 
これまでこのような知識がないまま、下記の様な .htaccessを使ってリダイレクトする解説記事を書いていたワケですが...
サイト更新、引越時に.htaccessでリダイレクトする方法解説
 
 
まぁ、一般的なサイトでリダイレクト設定をする場合、リダイレクトする URLはある程度の長さのある文字列ですので、あまり発生しない問題であるように感じます。
今回の件は、URL短縮サービスのような短い文字列でリダイレクト設定するために発生した問題、とも言えるでしょう。

 - CakePHP 2.x 3.x

GoogleAdwords

GoogleAdwords

最後までお読みいただきましてありがとうございます。
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

下記の空欄を埋めてください。 * Time limit is exhausted. Please reload CAPTCHA.

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

※入力いただいたコメントは管理者の承認後に掲載されます。

  関連記事

CakePHP3のForm Helperの使い方のまとめ

CakePHP3になりフォームヘルパーの使い方も大きく変わりましたので、使い方をまとめました。基本的な使い方からプラスアルファの便利な使い方まで紹介。

CakePHP3のHtmlHelperのLink設定のまとめ。mailto、URL、Root/Homeのリンクなども
CakePHP3のHtmlHelperのLink設定のまとめ。mailto、URL、Root/Homeのリンクなども

CakePHP3でHtmlHelperを使ってリンクの設定をする方法のまとめ。基本形からURLを指定、class、id、targetを指定、mailtoのリンク、画像をアンカーに、JavaScriptのダイアログなどの解説。

CakePHP3でシェルを作成しコマンドラインから実行・CakePHP2との違い
CakePHP3でシェルを作成しコマンドラインから実行・CakePHP2との違い

CakePHP3のシェルスクリプトを作成し、コマンドラインから実行する方法を解説。複数単語をつなげる場合の対応方法がCakePHP2より制限が厳しくなったのでCakePHP3の命名規則の確認が必要だ。

CakePHP3の画像、ファイルアップロードプラグインUpload Plugin 3.0の設置解説・その1
CakePHP3の画像、ファイルアップロードプラグインUpload Plugin 3.0の設置解説・その1

CakePHP3でファイル、画像をアップロードするプラグイン、upload plugin 3を導入する手順を解説した記事。3部作のその1で基本的な導入方法の解説で読みながら簡単に導入が可能。

CakePHP 2.3で PDFを作成する方法を調査「mpdf」「TCPDF」「FPDF」

CakePHPで PDFを編集、出力するには「mpdf」「TCPDF」「FPDF」といったプラグインがあり、使い勝手を比較検討しました。TCPDFが一番良さそうでした。

CakePHP3のCakeDC/Usersのログイン後のリダイレクトを設定解説
CakePHP3のCakeDC/Usersのログイン後のリダイレクトとユーザ権限管理の設定解説

CakeDC謹製Usersプラグインの紹介。ログイン認証後にリダイレクトする先の設定方法についての解説と実運用するために必要なコツを解説。便利な仕組みも仕様の理解があって初めてうまく使いこなせる。

CakePHP3のビューで受取ったテーブルのオブジェクトを連想配列に変換する方法
CakePHP3のビューで受取ったテーブルのオブジェクトを連想配列に変換する方法

コントローラーからビューに送ったテーブルのオブジェクトを連想配列に変換し、ビューの中で自由に使えるようにするメソッド「toArray()」の解説。連想配列に変換できれば利用度アップ!

CakePHP3のメッセージ日本語化の設定(国際化と地域化の機能の使い方の解説)
CakePHP3のメッセージ日本語化の設定(国際化と地域化の機能の使い方の解説)

CakePHP3の英語のメッセージを日本語化(多言語化)する手順を解説。オリジナルのメッセージを作成する方法やプログラムで文言を追加する場合の対応なども解説。

CakePHP 2.3 デバッグキット(DebugKit)超初心者向けフォロー講座

CakePHP初心者に向けてデバッグキット(DebugKit)のインストール方法、はまりポイントを解説。

CakePHP 2.3 Search Pluginで検索処理 その1設置方法

CakePHPの検索プラグイン Search Pluginの設置方法と基本的な検索処理の解説です。