Yourls est un ensemble de petits scripts PHP pour raccourcir les URLs. Il nécessite l'utilisation de la réécriture d'URL, et contient les règles pour Apache. Par contre, pas d'explication pour le serveur web NGinx.

yourls-logo.jpg

Les règles pour Apache sont les suivantes si Yourls est installé à la racine de l'espace web :

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

Plusieurs méthodes sont fonctionnelles, toujours pour un Yourls répondant à la racine de l'espace web, avec NGinx. Chez moi, seule la version moyenne fonctionne correctement, les deux autres présentent soit un problème avec les liens raccourcis, soit avec les liens de statistiques disponibles dans l'interface d'administration de Yourls.

  • La longue
        location / {
        if (!-f $request_filename){
                set $rule_0 1$rule_0;
                }
        if (!-d $request_filename){
                set $rule_0 2$rule_0;
                }
        if ($rule_0 = "21"){
                rewrite ^/.* /yourls-loader.php last;
                }
        }
  • La moyenne
        if (!-e $request_filename) {
                rewrite ^/([0-9a-z]+)/?$ /yourls-go.php?id=$1 last;
                rewrite ^/([0-9a-z]+)\+/?$ /yourls-infos.php?id=$1 last;
                rewrite ^/([0-9a-z]+)\+all/?$ /yourls-infos.php?id=$1&all=1 last;
                }
  • La courte
        location ~ ^/([\da-z]+)/?$ {
                try_files $uri $uri/ /yourls-go.php?id=$1;
                }

Ces lignes sont à mettre dans le fichier de configuration du vhost qui accueille Yourls, comme dans l'exemple ci-dessous :

server {
        listen          1.2.3.4:80;
        server_name     domain.tld;
        root            /var/www/domain.tld/www;

        # Static
        location / {
                index  index.html index.htm index.php;
        if (-f $request_filename) {
                expires max;
                break;
                }
        if (!-e $request_filename) {
                rewrite ^/([0-9a-z]+)/?$ /yourls-go.php?id=$1 last;
                rewrite ^/([0-9a-z]+)\+/?$ /yourls-infos.php?id=$1 last;
                rewrite ^/([0-9a-z]+)\+all/?$ /yourls-infos.php?id=$1&all=1 last;
                }
        }

        access_log      /var/log/nginx/domain.tld_access.log combined;
        error_log       /var/log/nginx/domain.tld_error.log;

        location ~ \.php$ {
                 fastcgi_pass   127.0.0.1:9000;
                 fastcgi_index  index.php;
                 include fastcgi_params;
                 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        }

        location ~ /\.ht {
            deny  all;
        }

        location ~* ^.+\.(jpg|jpeg|png|gif|xml|css|js)$ {
                expires         20d;
        }
}

Et hop, voilà un Yourls qui marche du tonnerre avec NGinx !