画像やリンクが無効になっている可能性もあるのでご了承下さい。
現在、当ブログでは新規記事投稿や記事編集を行った後、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 );」になっていればユーザ名とパスワードを入力することになる。
ここで問題が無ければ設定は完了となる。
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 — Your Own URL Shortener | ' . yourls_link();
$title = $title ? $title . " « " . $_title : $_title;
$title = yourls_apply_filter( 'html_title', $title, $context );
設置完成の図
すこし文面弄ってみたり追記した感じの物がこれ。
今後はこれを用いた短縮 URL を WordPress の WP to Twitter と連携させるんでこのまま設置しておくことにする。
補足 2013/11/02
YOURLS の Plugin に AntiSpam と言う物があったので、これをインストールして有効化した。ソースをみてみると複数の RBL を用いた判定を行っているようで、非常に重い。尚かつ、うちの環境ではアクセスする IP がプライベートアドレスの C クラスなのでスパム判定を喰らってしまうオチになった。
AntiSpam は欲しいなーと思ったけど、これは止めておくかなと。若しくはローカル IP の場合はバイパスする改造を施すかどうか。
コメント