YOURLS-自分専用の短縮URLをサーバーに設置しよう

2015年08月22日

YOURLSは、無料&オープンソースのPHP製URL短縮プログラム。
自分のサーバに設置することで「TinyURL」や「bitly」のような短縮URL生成サービスを公開できる。

どうして短縮URLが欲しいのかというと、色々理由があるものの、規制の短縮URLサービスはいつ終了するかわからず、自分のサーバ内に半永久的に使える(自家用)短縮URLが欲しかったから。

長いURLの扱いはなかなか面倒で、スクラップブッキングに使うQRコードを生成する際にURLが長いと生成しづらいほか(こんな用途のためにわざわざインストールするニンゲンは少なそう)、メルマガ等でのURL紹介時に、長いURLだと不都合が発生するため。

同様のスクリプトはいくつかあるけれど、すでに沢山のユーザがいると思われるYOURLSにした。
沢山のユーザがいるということは、その分、トラブルシューティングも沢山あるということ。
また、YOURLSは生成したURLの一覧表示などの機能がついているので、簡易的な自分用ブックマークリストとしても使用可能だ。
機能には何ら関係ないが、リリースには「Tom Araya」や「Till Lindemann」など、メタルにゆかりのある名前がつけられている。

YOURLSの設置

  1. GithubのYOURLS、リリースページからソースコードをダウンロードする。
    スクリーンショット 2015-08-22 14.37.17

  2. 解凍後、「user」フォルダの中にある「config-sample.php」を複製し、「config.php」にリネームする。

  3. 「config.php」内にて、データベース接続先や公開URLを設定する。
    この際、専用のデータベースを使用したい場合は、設置先のサーバ上で設定しておくこと。

  4. フォルダをまるっとサーバにアップロードする。

  5. http://●設置先●/admin/にアクセスする。

スクリーンショット 2015-08-22 15.01.29

トラブル

上記で全ての設定が完了するはずだったが、管理画面上で「.htaccessにアクセスできない」というエラーが出てしまった。
公式FAQにある通りの.htaccessを設置する必要がある。

短縮URLサイトをルートURLで使用する場合:
[plain]
# 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
[/plain]

短縮URLサイトをサブディレクトリで使用する場合:
[plain]
# 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
[/plain]

以上の.htaccessを作成し、設置することで問題なく動く…はずたったが、
今度は「パスワード生成不能」というような内容のエラーが出てしまった。

これはどうやらconfig.phpの中に記述してあるパスワードをプログラムが暗号化する際、config.phpに書き込む権限がなく発生してしまうエラーらしい。
このエラーは、config.phpのパーミッションを「666」に変更することで出なくなった。

さらに、肝心の「URLを短縮する」といった動作にまつわるAjaxが動かないというトラブルがあったものの、こちらはconfig.phpにうっかりミスで余計な記述を足してしまった事によるものだった。
(普通はそんな間違いはしないはず)

プラグイン

YOURLSは、デフォルトの場合、特にCustom short URLを指定しない場合は、連番で短縮番号が振られてしまう。
「http://ほげ.com/1」「http://ほげ.com/2」…のような形だ。

あまり気分が良いものではないので、公式のプラグインリストの中から、random-keywordsというプラグインをダウンロードした。

YOURLSの「user」フォルダの中の「plugins」フォルダ内に「random-keywords」というフォルダを作り、解凍したファイルの中身を入れる。
その後、管理画面の「Manage Plugins」メニューで表示されるプラグイン一覧から、プラグインをアクティベートする。

スクリーンショット 2015-08-22 15.09.57

これで「http://ほげ.com/hJudjK」のようにランダムなURLを生成できるようになった。

追記:config.phpの書き方

コメントにてご質問があった、動作に必要な最低限のconfig.phpの書き方を追記。
※インストールしたバージョンによって多少違いがあるかもしれない。
[php highlight="11,14,17,21,32,51,60"]
<?php
/* This is a sample config file.
* Edit this file with your own settings and save it as "config.php"
*/

/*
** MySQL settings - You can get this info from your web host
*/

/** MySQL database username */
define( 'YOURLS_DB_USER', '■ここにデータベース・ログインユーザー名を入れる■' );

/** MySQL database password */
define( 'YOURLS_DB_PASS', '■ここにデータベース・ログインパスワードを入れる■' );

/** The name of the database for YOURLS */
define( 'YOURLS_DB_NAME', '■ここにデータベース名を入れる■' );

/** 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', '■MySQLホスト名(接続先)を入れる。同じサーバ内なら通常はlocalhost。レンタルサーバの場合はデータベース用サーバが別にある事が多い■' );

/** MySQL tables prefix */
define( 'YOURLS_DB_PREFIX', 'yourls_' );

/*
** Site options
*/

/** YOURLS installation URL -- all lowercase and with no trailing slash.
** If you define it to "http://site.com", don't use "http://www.site.com" in your browser (and vice-versa) */
define( 'YOURLS_SITE', '■ここに設置先のサイトURLを入れる■' );

/** Timezone GMT offset */
define( 'YOURLS_HOURS_OFFSET', 0 );

/** YOURLS language or "locale".
** Change this setting to "localize" YOURLS (use a translation instead of the default English). A corresponding .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', true );

/** 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', ■短縮URLサービスを一般公開する場合はfalse、自分だけのサービスにする場合は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', 'XXXXXXXXXXXXX' );

/** 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(
'■YOURLSにログインするためのID■' => '■YOURLSにログインするためのパスワード■' /* Password encrypted by YOURLS */
);

/** 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', 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.
*/

/*
** Personal settings would go after here.
*/
[/php]

  • 原正之
    原正之です YOURLS短縮URLを利用しようと思いましたが分からないところがありますので質問します config.phpの中を書き換える方法がわかりません データベース接続先や公開URLを設定するということですが、どこを書き換えていいのか チンプンカンプンです config.phpのどこで記入すればいいのか教えていただけないでしょうか? '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', 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. */ /** * Reserved keywords (so that generated URLs won't match them) * Define here negative, unwanted or potentially misleading keywords. */ xsvx1018236_yshopというDBをどこに書き入れたらいいのかわかりません よろしくお願いします
  • LIMA
    記事の一番最後に、config.phpへの記入方法を追記いたしましたので、ご覧ください。 > xsvx1018236_yshopというDBをどこに書き入れたらいいのかわかりません これはデータベース名ですよね。 ↓この行を define( 'YOURLS_DB_NAME', 'yourls' ); ↓こう書きます define( 'YOURLS_DB_NAME', 'xsvx1018236_yshop' );