URL 短縮を行う PHP スクリプト「YOURLS」を入れて見た

Linux
この記事は約8分で読めます。
この記事は最終更新日より 1 年以上経過しています。
画像やリンクが無効になっている可能性もあるのでご了承下さい。

 現在、当ブログでは新規記事投稿や記事編集を行った後、WP to Twitter と言う Plugin で自動的に記事 URL を Twitter に投稿するようにしている。その際、URL は Bit.ly で短縮させていたが、どうも偶にエラーが出て短縮されない現象が起きるようになった。
 それじゃぁ他に Google やらのサービスでやってしまおうかとも思った所、Plugin の Option を見たら YOURLS と言う選択肢が見えた。これは何だろうってググったら、サーバー設置型の URL 短縮 PHP スクリプトだった。何かと自前でやるのは大好きなのでこれに食い付いてみた。

スクリプトのダウンロード

 オフィシャルサイトより下方の Download 以下、リンクを辿ってダウンロードしてくる。現在、YOURLS の Version は 1.6 だった。
 設置に関してはオフィシャルページの Install/Upgrade のリンクを辿れば書いてあるので、その通りに行えば良い。実際に行った作業は次の通り。

アーカイブの展開

 自分は tar.gz 形式でダウンロードしたので、そのまま tar xzvf として展開した。内容は YOURLS-1.6 以下のディレクトリにある。(Ver 1.6 の場合)

設定ファイルの編集

 config-sample.php を config.php としてコピーを行い、内容を編集する事で設定を行う。

$ cp user/config-sample.php user/config.php

 編集には極普通のテキストエディタを用いる。以下に設定する内容を記載。

/** MySQL のユーザ名を入力する */
define( 'YOURLS_DB_USER', 'your db user name' );

/** MySQL に接続する為のパスワードを入力 */
define( 'YOURLS_DB_PASS', 'your db password' );

/** 使用する DB 名を入力 */
define( 'YOURLS_DB_NAME', 'yourls' );

/** MySQL が稼働しているホスト名 */
define( 'YOURLS_DB_HOST', 'localhost' );

/** テーブルの接頭語を設定する */
define( 'YOURLS_DB_PREFIX', 'yourls_' );

/*
 ** Site options
 */

/** YOURLS を使用する URL */
define( 'YOURLS_SITE', 'http://site.com' );

/** タイムゾーンを GMT 基準で設定する。日本は +9 だが PHP の設定による。*/
define( 'YOURLS_HOURS_OFFSET', 0 );

/** 動作言語を設定する。 */
define( 'YOURLS_LANG', '' );

/** 短縮 URL をユニークな物にする。True で同一 URL に対しては 1 つの URL のみとなる。 */
define( 'YOURLS_UNIQUE_URLS', true );

/** Admin エリアをパスワードで保護するか否か。
 ** Read http://yourls.org/privatepublic for more details if you're unsure */
define( 'YOURLS_PRIVATE', true );

/** Cookie を暗号化する為に使うキーを設定する。適当な文字列を設定する **/
define( 'YOURLS_COOKIEKEY', 'modify this text with something random' );

/** Admin エリアにログインする為のユーザ名とパスワードを設定する
 ** Read http://yourls.org/userpassword for more information */
$yourls_user_passwords = array(
        'username' => 'password',
        'username2' => 'password2'      // You can have one or more 'login'=>'password' lines
        );

/*
 ** URL Shortening settings
 */

/** 短縮後の URL でアルファベットの大文字小文字を区別するか否かの設定 */
define( 'YOURLS_URL_CONVERT', 36 );
/*
 * 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.
 */

/** 不適切なワードでカスタムな短縮 URL を作成出来ないようにする為の NG ワード
*/
$yourls_reserved_URL = array(
        'porn', 'faggot', 'sex', 'nigger', 'fuck', 'cunt', 'dick', 'gay',
);

/*
 ** Personal settings would go after here.
 */

DB の作成

 config.php で設定した通りに DB を作成する。phpmyadmin やら mysql コマンド直でも楽な方で良い。

mysql> create database YOURLS_DB;
mysql> grant all on YOURLS_DB.* to USERNAME identified by 'PASSWORD';
mysql> flush privileges;

ブラウザから Admin エリアにアクセス

 ブラウザのアドレスバーに http://example.com/admin の用に自分のドメインを入れてアクセスを行う。「define( ‘YOURLS_PRIVATE’, true );」になっていればユーザ名とパスワードを入力することになる。
 ここで問題が無ければ設定は完了となる。
1101_yourls_admin

mod_rewrite 関連設定

 YOURLS では mod_rewrite が用いられるので、このルールが .htaccess に無いと行けない。パーミッションの関係上、.htaccess を作成出来ない場合や書き込みが出来ない場合、自分で作成してやる必要がある。

# BEGIN YOURLS
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /yourls-loader.php [L]
</IfModule>
# END YOURLS

 YOURLS をサブディレクトリにインストールした場合には若干設定が変わるので、オフィシャルの物を確認した方が良い。
 また、WordPress も mod_rewrite を用いるので、同一ディレクトリにインストールする事は出来ない。

URL を短縮させてみる

 今回は http://bp7.org/ と、自身がもつこのドメインをそのまま使うことにしてみた。標準だと index が無いので 404 が帰ってくる。そこで、YOURLS のアーカイブに含まれていた sample-public-front-page.txt というファイルを DocumentRoot に持ってくれば良い。

$ cp sample-public-front-page.txt /PATH/TO/DOCUMENTROOT/index.php

 その後、index にアクセスするとページが表示されるので「URL」と書かれた input エリアに URL を入力してやれば短縮された URL が出力される。
 短縮された URL は登録順に 16 進数でナンバリングしていく形だ。また、短縮時に入力された URL の Title をフェッチするので、サイトによっては若干短縮が完了するまでにタイムラグが発生する。

index のカスタマイズ

 index.php 内を編集する事でタイトルや文面を変更することが可能。ページのタイトル自体は includes/functions-html.php 内に変数として定義されているので任意に編集可能。

        // Page title 以下 $_title のシングルクォート内がページのタイトル
        $_title = 'YOURLS &mdash; Your Own URL Shortener | ' . yourls_link();
        $title = $title ? $title . " &laquo; " . $_title : $_title;
        $title = yourls_apply_filter( 'html_title', $title, $context );

設置完成の図

 すこし文面弄ってみたり追記した感じの物がこれ。
1101_yourls
 今後はこれを用いた短縮 URL を WordPress の WP to Twitter と連携させるんでこのまま設置しておくことにする。

補足 2013/11/02

 YOURLS の Plugin に AntiSpam と言う物があったので、これをインストールして有効化した。ソースをみてみると複数の RBL を用いた判定を行っているようで、非常に重い。尚かつ、うちの環境ではアクセスする IP がプライベートアドレスの C クラスなのでスパム判定を喰らってしまうオチになった。
 AntiSpam は欲しいなーと思ったけど、これは止めておくかなと。若しくはローカル IP の場合はバイパスする改造を施すかどうか。

著者プロフィール
ぶっち

本格的に PC へ触れ始めてたのは 1990 年位から。
興味は PC 全般。OS は Windows と Linux などを嗜む。
プログラマやネットワークエンジニアを経てフリーに活動している 2 児の父な 40 代半ばのおじさんです。

ぶっちをフォローする

コメント

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.