ご注意下さい
この記事は3年以上前に書かれた記事ですので、内容が古い可能性があります。
なぜ、今自前で短縮URLサービスを構築する必要があるんでしょうか?通常の人には不要ですね。bitlyやwordpress.orgでも短縮URLサービスを公開していますのでそれで充分だと思います。
答えは、自分のサーバー内に自分用の短縮URLサービスが単に欲しかったからです(笑)。bitlyなどのサービスはいつ終了するかも分かりませんしね。
と、言うより単にインストールして使ってみたかったから、というのが一番しっくり来るかもしれません。
とにかく、今回は短縮URLオープンソースYOURLSのインストールとWordpressとの連携について解説します。
この記事のもくじ
短縮URLオープンソースYOURLSのインストール
短縮URL用ドメインの決定
まず最初にすべきことは短縮URLに使うドメインを取得することです。当然のことながら取得するURLは短けば短いほど短縮されたURLの文字列も短くなることになります。
私の場合、2004年から16年間もhne.jpというドメインを維持しています。ここ10年以上お金だけ払ってきていたのですがいよいよ再活躍することができそうです(笑)。
2004年当時はi-modeが全盛で、友人とのやりとりは携帯メールが一般的でした。相手のメールアドレスのne.jp部分をHne.jpに1文字付け加えてメールを送ると送信元を(事前に設定した匿名メールアドレス)@hne.jpに変換してメールを送る、というサービスを提供していたのでした。(例 hogehoge@docomo.ne.jpに匿名メールを送りたい場合にはhogehoge@docomo.hne.jpにメールを送信すればいい、という仕組み)。
サーバー証明書の取得
この時代にSSLを利用していないサービスはありえません。そのURLを踏む気にもなりませんよね?ということで多少コストはかかってしまいますがサーバー証明書を取得します。
当サイトは2017年からSSL化を開始しました。証明書発行機関はFujiSSLさんを利用中です。年間なんと1,100円という格安さ。
FujiSSLさんの使い方については以下の記事を参考にしてください。
-
【FujiSSL】格安SSL証明書でWebサーバをSSL化する方法(apache + mod_ssl)
格安サーバ証明書FujiSSLを使ったWordPressのSSL化について解説します。続きを見る
-
格安SSL証明書を更新する(Fujisslの場合)
HTTPS(SSL)化に必須のサーバー証明書ですが、格安で安定性に定評のあるFujisslのサーバー証明書について更新期限が来たので更新してみました。 …続きを見る
Fuji SSLさんは以下のページです。
SSLストア 【RapidSSL 1,620円 Symantec 53,000円 GeoTrust 11,880円】
YOURLSの設定
YOURLSのダウンロード
Githubからzipもしくはtar.gz形式でソースコードをダウンロードします。
データベース構築
YOURLSにはMySQLが必要となります。接続用のユーザ及びデータベースを作成します。
ここではYOURLS用にDBユーザー、yourls。データベース名もyourlsとして作成します。
MySQLにログイン後以下のコマンドを叩いてください。
# mysql -u root -h localhost -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 345764 Server version: 5.7.30-log MySQL Community Server (GPL) Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> create database yourls; Query OK, 1 row affected (0.02 sec) mysql> mysql> create user 'yourls'@'localhost'; ERROR 1819 (HY000): Your password does not satisfy the current policy requirements mysql> create user 'yourls'@'localhost' identified by 'password'; Query OK, 0 rows affected (0.01 sec) mysql> mysql> grant all privileges on yourls.* to 'yourls'@'localhost'; Query OK, 0 rows affected (0.00 sec) mysql>
# mysql -u yourls -h localhost -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 346057 Server version: 5.7.30-log MySQL Community Server (GPL) Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | +--------------------+ 1 row in set (0.00 sec) mysql> 〜〜〜〜〜〜〜〜〜 grant 後 〜〜〜〜〜〜〜〜〜 mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | yourls | +--------------------+ 2 rows in set (0.00 sec) mysql>
設定ファイル編集
$HNEHOMEをドキュメントルートとすると、$HNEHOME/YOURLS-1.7.9/user/config-sample.phpというファイルがあるので、同ディレクトリ内でconfi.phpとしてコピーし、こちらを編集していきます。
変更箇所はハイライトしておき、解説します。
<?php
/* This is a sample config file.
* Edit this file with your own settings and save it as "config.php"
*
* IMPORTANT: edit and save this file as plain ASCII text, using a text editor, for instance TextEdit on Mac OS or
* Notepad on Windows. Make sure there is no character before the opening <?php at the beginning of this file.
*/
/*
** MySQL settings - You can get this info from your web host
*/
/** MySQL database username */
define( 'YOURLS_DB_USER', 'yourls' );
/** MySQL database password */
define( 'YOURLS_DB_PASS', 'password' );
/** The name of the database for YOURLS */
define( 'YOURLS_DB_NAME', 'yourls' );
/** MySQL hostname.
** If using a non standard port, specify it like 'hostname:port', eg. 'localhost:9999' or '127.0.0.1:666' */
define( 'YOURLS_DB_HOST', 'localhost' );
/** MySQL tables prefix */
define( 'YOURLS_DB_PREFIX', 'yourls_' );
/*
** Site options
*/
/** YOURLS installation URL -- all lowercase, no trailing slash at the end.
** If you define it to "http://sho.rt", don't use "http://www.sho.rt" in your browser (and vice-versa) */
define( 'YOURLS_SITE', 'https://hne.jp' );
/** Server timezone GMT offset */
define( 'YOURLS_HOURS_OFFSET', 0 );
/** YOURLS language
** Change this setting to use a translation file for your language, instead of the default English.
** That translation file (a .mo file) must be installed in the user/language directory.
** See http://yourls.org/translations for more information */
define( 'YOURLS_LANG', '' );
/** Allow multiple short URLs for a same long URL
** Set to true to have only one pair of shortURL/longURL (default YOURLS behavior)
** Set to false to allow multiple short URLs pointing to the same long URL (bit.ly behavior) */
define( 'YOURLS_UNIQUE_URLS', false );
/** Private means the Admin area will be protected with login/pass as defined below.
** Set to false for public usage (eg on a restricted intranet or for test setups)
** Read http://yourls.org/privatepublic for more details if you're unsure */
define( 'YOURLS_PRIVATE', true );
/** A random secret hash used to encrypt cookies. You don't have to remember it, make it long and complicated. Hint: copy from http://yourls.org/cookie **/
define( 'YOURLS_COOKIEKEY', 'cookies key' );
/** Username(s) and password(s) allowed to access the site. Passwords either in plain text or as encrypted hashes
** YOURLS will auto encrypt plain text passwords in this file
** Read http://yourls.org/userpassword for more information */
$yourls_user_passwords = array(
'user' => 'password',
// 'username2' => 'password2',
// You can have one or more 'login'=>'password' lines
);
/** Debug mode to output some internal information
** Default is false for live site. Enable when coding or before submitting a new issue */
define( 'YOURLS_DEBUG', false );
/*
** URL Shortening settings
*/
/** URL shortening method: 36 or 62 */
define( 'YOURLS_URL_CONVERT', 62 );
/*
* 36: generates all lowercase keywords (ie: 13jkm)
* 62: generates mixed case keywords (ie: 13jKm or 13JKm)
* Stick to one setting. It's best not to change after you've started creating links.
*/
/**
* Reserved keywords (so that generated URLs won't match them)
* Define here negative, unwanted or potentially misleading keywords.
*/
$yourls_reserved_URL = array(
'porn', 'faggot', 'sex', 'nigger', 'fuck', 'cunt', 'dick',
);
/*
** Personal settings would go after here.
*/
14行目 | YOURLS_DB_USER | YOURLS用のDBユーザ名 |
17行目 | YOURLS_DB_PASS | 上記ユーザー用パスワード |
20行目 | YOURLS_DB_NAME | YOURLS用データベース名 |
35行目 | YOURLS_SITE |
短縮URLのドメイン部分の記載をします。 私のhttps://hne.jpとなります。最後の'/'は不要です。 |
49行目 | YOURLS_UNIQUE_URLS |
同一URLに対して複数の短縮URLを発行するかどうかの指定です。 True: 発行しない False:リクエストの度に新規に短縮URLを発行します 私の場合は主にTwitterに流すのが目的ですので短縮URLごとにアクセス解析ができることからfalseに指定しました。 |
57行目 | YOURLS_COOKIEKEY |
http://yourls.org/privatepublicにアクセスしてランダムな文字列を埋め込みましょう。リロードする度に文字列は変わります。 クッキーをハッシュ値化するための暗号鍵です。 |
63行目 | 'user' => 'password' |
管理者名とそのパスワードです。 |
77行目 | YOURLS_URL_CONVERT |
36か62を選びます。36の場合は大文字小文字の区別なし、62は大文字小文字を区別します。 デフォルトだと36^5桁で約6千万通り、62だと約9億通りとなります。 |
ファイル配置
シンプルにドキュメントルート配下に全てを移してしまいます。adminディレクトリがドキュメントルート直下に来るように配置します。
# pwd # $HNEHOME/YOURLS-1.7.9 # mv * ..
アクセスしてみよう
管理者画面にアクセスします。https://hne.jp/adminとなります。
config.phpで指定した管理者ユーザ、パスワードでログインしましょう。
URLに適当なURLを入れると短縮URLが下の方にどんどん追加されていきます。
プラグインの有効化
上のスクリーンショットではすでに変更を加えてしまいましたが、何も設定変更をしないと短縮URLはhttps://hen.jp/1と数字が増えていくように短縮URLが決定されていきます。数字のインクリメントでは容易に推測されてしまいますし、第一格好が悪いのでランダムな文字列を使うようにプラグインを有効化します。
左上の「Manage Plugins」を押すと以下の画面に飛びます。
ここで「Random ShortURLs」を「Activate」してください。これでhttps://hen.jp/91Uds のような短縮URLになります。
桁数の変更
デフォルトでは短縮URL用の文字列の桁数は5桁となっていますので発行可能短縮URL数は62^5で約9億件となります。公開にするにしてもこんなに不要です。
ですので1桁減らして4桁にしちゃいます。62^4=14,776,336通り。充分です。
左上のManager PluginsからRandom ShortULRs Settingsを選択してください。
ここで4を入力して完了です。
WP to Twitterプラグインの設定
その前にアクセストークンの取得
WP to Twitterプラグインに設定するためのトークンの取得が必要です。
YOURLSの左上Toolsをクリックし、一番下に「Secure passwordless API call」という欄があります。そこにアクセストークンの記載がありますのでコピーしましょう
WP to Twiiterプラグイン側の設定
WordPress管理画面からWP to Twitter設定に移り、URL Shortenerタブに移ってください。
URI to the YOURLS APIについてはその下のExampleをコピペして、ドメイン名を変更するだけでOKです。
また先程コピーしたアクセストークンを YOURLS signature token: に貼り付けてください。
また上の図ですと Default: sequential URL numbering.となっていますが、こちらはCustomer keyword for YOURLS url slug.が良いと思います。
Post ID for YOURLS url slug |
この記事の場合https://hne.jp/12000となります。せっかく4桁で設定したのにこの設定では5桁になってしまうので意味ないです |
Custom keyword for YOURS url slug | 何を見ているのか不明ですが、こちらは4桁の英数字で設定されています。 |
Default: sequential URL numbering |
連番になってしまいます。 https://hne.jp/1 から2,3となっていきます。 |
テスト
WP to Twitter設定→URL Shortenerの右下にテスト用のボタンがあります。
こいつをクリックすると以下のような画面が表示されれば問題なく動作しています。Twitterに実際にテスト投稿されますので注意してください。
念のためTwitterも見てみましょう。
まとめ
さて、本日は自前URL短縮サービスの設定方法と、それをWordPressと連携する方法について解説しました。
自前URL短縮サービスには、オープンソースでかつ利用者も多いYOURLSを使いました。YOURLSはデータベースとしてMySQLが必要となりますが、WordPressユーザーであれば既に導入済みですので敷居は低いのではないでしょうか。
自前とは言え、このような時代ですので、サービス提供URLはSSLにてインタフェースを提供するようにしています。FUJISSLさんは全てオンラインで申請から承認までされますし、なにより格安ですのでSSL証明書の取得を考えている方は検討してみてもいいと思います。
参考にさせて頂いたサイト
最後に参考にさせて頂いたサイトをご紹介します。ありがとうございました。
自前で短縮URLを用意するYOURLS
記事は以上!