最近工做中遇到一個需求,將app下載地址變成短連接進行推廣,索性就研究了下yourls 。php
發現這個玩意功能挺強大的,不但能夠批量生成本身的短地址,還能夠管理,統計每一個短地址點擊數量,還能夠提供api接口。html
最重要的是,這個開源免費,本身拿來作二次開發再適合不過了。mysql
下面介紹怎麼一步步搭建yourlslinux
服務器要求:nginx
一、直接本地克隆或者下載yourls代碼git
git https://github.com/YOURLS/YOURLS.git
二、將user目錄下的config-sample.php 重命名 爲 config.phpgithub
三、修改config.php裏面的配置參數 (linux上注意:config.php這個文件權限最好跟啓動Web服務器用戶一致,否則可能加密密碼保存不了)web
define( 'YOURLS_DB_USER', 'root' ); define( 'YOURLS_DB_PASS', '123456' ); define( 'YOURLS_DB_NAME', 'yourls' ); define( 'YOURLS_DB_HOST', 'localhost' ); define( 'YOURLS_DB_PREFIX', 'yourls_' ); //上面是數據信息不用多說 define( 'YOURLS_SITE', 'http://test.com' ); //你本身服務器的域名 用最短的,短地址也是基於這個生成。 define( 'YOURLS_HOURS_OFFSET', '+8'); //時區偏移 define( 'YOURLS_LANG', 'zh_CN' ); //這個語言默認是英文,沒有中文包,須要本身去 https://github.com/guox/yourls-zh_CN/下載,放到 user/languages 裏面 define( 'YOURLS_UNIQUE_URLS', true ); //短地址是否惟一 define( 'YOURLS_PRIVATE', true ); //是否私有,若是私有的,則進行api調用生成短地址時須要傳遞用戶名和密碼 define( 'YOURLS_COOKIEKEY', 'A2C7&H~r80pTps{nIfI8VFpTxnfF3c)j@J#{nDUh' );//加密cookie 去 http://yourls.org/cookie 獲取 $yourls_user_passwords = array( 'admin' => '123456' /* Password encrypted by YOURLS */ , //用戶名=>密碼 可填多個 登陸成功後這裏的明文密碼會被加密 ); define( 'YOURLS_DEBUG', false ); //是否開啓調試 define( 'YOURLS_URL_CONVERT', 62 ); //使用36進制 仍是62進制 這個最好一開始設好不要修改,避免地址衝突,建議62進制 $yourls_reserved_URL = array( 'porn', 'faggot', 'sex', 'nigger', 'fuck', 'cunt', 'dick', //排除一下短地址,這些地址是不會生成的 );
四、服務器配置sql
上傳到服務器數據庫
apache
(1)配置裏開啓 mod_rewrite 模塊
(2)建立 .htaccess 文件
#.htaccess 文件內容,若是是根目錄下 http://yoursite/ # 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 #若是是二級目錄下 http://yoursite/somedir/ # BEGIN YOURLS <IfModule mod_rewrite.c> RewriteEngine On RewriteBase /somedir/ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^.*$ /somedir/yourls-loader.php [L] </IfModule> # END YOURLS
nginx
server { # HTTP over IPv4 & IPv6 listen 80; listen [::]:80; # HTTPS over IPv4 & IPv6 listen 443 ssl; listen [::]:443 ssl; ssl_certificate example.com.crt; ssl_certificate_key example.com.key; server_name example.com www.example.com; # Root directory root /path/to/yourls/files; # Rewrites 主要看這一項配置就夠了,路由重寫 location / { try_files $uri $uri/ /yourls-loader.php$is_args$args; } # PHP engine location ~ \.php$ { include fastcgi.conf; # include fastcgi_params; fastcgi_index index.php; fastcgi_pass unix:/var/run/php/php7.1-fpm.sock; } }
五、重啓web服務器,瀏覽器 輸入 http://域名/admin,而後選擇安裝便可安裝成功
(1) 若是安裝報錯,或者不跳轉,那有多是你的php 或者 mysql 版本太低;
(2) 還有可能建立數據庫失敗,能夠選擇手動建立:
1 create databases yourls; 2 CREATE TABLE `yourls_url` ( 3 `keyword` varchar(200) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, 4 `url` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, 5 `title` text, 6 `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, 7 `ip` varchar(41) NOT NULL, 8 `clicks` int(10) unsigned NOT NULL, 9 PRIMARY KEY (`keyword`), 10 KEY `timestamp` (`timestamp`), 11 KEY `ip` (`ip`) 12 ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 13 14 CREATE TABLE `yourls_options` ( 15 `option_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, 16 `option_name` varchar(64) NOT NULL DEFAULT '', 17 `option_value` longtext NOT NULL, 18 PRIMARY KEY (`option_id`,`option_name`), 19 KEY `option_name` (`option_name`) 20 ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
21 CREATE TABLE `yourls_log` ( 22 `click_id` int(11) NOT NULL AUTO_INCREMENT, 23 `click_time` datetime NOT NULL, 24 `shorturl` varchar(200) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, 25 `referrer` varchar(200) NOT NULL, 26 `user_agent` varchar(255) NOT NULL, 27 `ip_address` varchar(41) NOT NULL, 28 `country_code` char(2) NOT NULL, 29 PRIMARY KEY (`click_id`), 30 KEY `shorturl` (`shorturl`) 31 ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 32 33 INSERT INTO `yourls`.`yourls_options`(`option_id`, `option_name`, `option_value`) VALUES (1, 'version', '1.7.4'); 34 INSERT INTO `yourls`.`yourls_options`(`option_id`, `option_name`, `option_value`) VALUES (2, 'db_version', '482'); 35 INSERT INTO `yourls`.`yourls_options`(`option_id`, `option_name`, `option_value`) VALUES (3, 'next_id', '1553242197'); 36 INSERT INTO `yourls`.`yourls_options`(`option_id`, `option_name`, `option_value`) VALUES (4, 'active_plugins', 'a:1:{i:0;s:20:\"random-bg/plugin.php\";}'); 37 INSERT INTO `yourls`.`yourls_options`(`option_id`, `option_name`, `option_value`) VALUES (5, 'core_version_checks', 'O:8:\"stdClass\":4:{s:15:\"failed_attempts\";i:0;s:12:\"last_attempt\";i:1553161787;s:11:\"last_result\";O:8:\"stdClass\":2:{s:6:\"latest\";s:5:\"1.7.3\";s:6:\"zipurl\";s:56:\"https://api.github.com/repos/YOURLS/YOURLS/zipball/1.7.3\";}s:15:\"version_checked\";s:5:\"1.7.4\";}');
六、短地址默認是是按照順序生成,從1開始,有可能咱們想不按照這樣順序,能夠推薦用時間戳來生成
只須要修改 includes/functions.php 272行左右
將 $id = yourls_get_next_decimal(); 改成 $id = time();
七、api接口生成
請求地址:http://域名//yourls-api.php
參數:username(用戶名)、password(密碼)、format(格式 json)、url(長地址)、action(功能,shorturl)
返回:
{ "url": { "keyword": "1H7fa7", "url": "http://www.baidu.com/download/index.html?player_id=2", "title": "下載頁面", "date": "2019-03-22 08:04:23", "ip": "127.0.0.1" }, "status": "success", "message": "http://www.baidu.com/download/index.html?player_id=2 已保存爲", "title": "下載頁面", "shorturl": "http://test.com/1H7fa7", "statusCode": 200 }
上面的 shorturl 就是生成的短連接,也能夠在後臺直接生成指定的短連接。
每一個短連接後面拼接一個 + ,就能夠查看這個連接的點擊狀況,例如:http://test.com/1H7fa7+
shorturl