パラメータ等で極端に長いURLによって開かれるページをユーザーに渡さなければならない時があります。長いURLを手打ちするのは困難であり、何か楽に開いてもらう方法を考える必要があります。対処法のひとつとしてQRコードがあります。QRコードを読み取れば長い文字列でも一発で使えます。とはいえQRコードはQRコードを読み取るための方法が必要です。QRコードを使えない状況にあるユーザーにも対応できる方法として短縮URLがあります。短いURLならば手打ちでもなんとかなりやすいです。
ash-jc-allen/short-urlは次のGitHubリポジトリにあります。
ash-jc-allen/short-url: A Laravel package for creating shortened URLs for your web apps.
ash-jc-allen/short-urlはデータベースに宛先URLと短縮URLのキーのペアを保存するという方法をとっており少々準備が必要です。
まずインストールです。例によって composer でできます。
composer require ashallendesign/short-url
次いで設定ファイルとマイグレーションファイルの出力です。特にマイグレーションは必須です。
php artisan vendor:publish --provider="AshAllenDesign\ShortURL\Providers\ShortURLProvider"
マイグレーションファイルが出力出来たら次コマンドでマイグレーションを進めます。これで準備完了です。
php artisan migrate
使い方はシンプルです。次のようにURLを渡してmakeメソッドを呼んでやれば、それで短縮URLが一つ生成されます。
$shortURLObject = $builder ->destinationUrl(route('account.search')) ->make(); dump($shortURLObject->default_short_url); // 直に入れてもOK $shortURLObject = $builder ->destinationUrl('https://account/search') ->make(); dump($shortURLObject->default_short_url);
出力されたURLにアクセスすれば、それだけでdestinationUrlで渡したURLへリダイレクトされます。
デフォルトでは必ずリダイレクト先がHTTPSになります。本番環境ならばありがたい機能ですが開発環境では邪魔になる機能でもあります。これを解決するには先ほど出力した設定ファイル内を書き変えるのが楽です。書き換えるのは次の部分です。
// config/short-url.php 95~106行目辺り /* |-------------------------------------------------------------------------- | Enforce HTTPS in the destination URL |-------------------------------------------------------------------------- | | Here you may specify if the visitor is redirected to the HTTPS | version of the destination URL by default. This option can be | overridden when creating the short URL with the ->secure() | method. | */ // デフォルトでは↓の通りになっているのを // 'enforce_https' => true, // ↓の様に書き換える 'enforce_https' => env('app_env') === 'production',
こうすると本番環境では必ずHTTPS、本番環境以外ではHTTPも可となります。
文字が紛らわしくて誤りやすいという問題があります。コピペを促したりやフォントの工夫でなんとなりやすいのですが、避けておいた方が無難です。これは次の部分でできます。
// config/short-url.php 140~1r46行目辺り /* |-------------------------------------------------------------------------- | Alphabet |-------------------------------------------------------------------------- | | Define the characters allowed in the output short URL keys. | The 'alphabet' must be at least 16 unique characters | and cannot contain spaces. | */ // デフォルトでは↓の通りになっているのを // alphabet' => 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890', // ↓の様に書き換える 'alphabet' => 'abcdefghjkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ123456789',
こうすると短縮URLに使われる文字を制御でき、lと1、oと0とOなどといったフォントによっては紛らわしい文字が短縮URLに使われなくなります。
他にも多数の項目が設定でき、目的に合わせてカスタマイズできるかと思います。