Skip to content

Přesměrování

Ve výchozím stavu Roští pracuje se všemi doménami přiřazenými k aplikaci stejně. To znamená, že pokud máte doménu www.example.com a doménu example.com, na obou bude stejný obsah. V reálném světě je ale lepší, pokud je jedna z domén přesměrována na druhou a máte tedy jen jednu doménu, na které vaše aplikace běží.

V našich kontejnerech se toho dá snadno dosáhnout změnou konfigurace Nginxu, kterou najdete v /srv/conf/nginx.d/. V případě PHP image tady najdete soubor php.conf, který vypadá takto:

server {
        listen       0.0.0.0:8000;
        listen       [::]:8000;

        root /srv/app;
        index index.php index.html;

        port_in_redirect off;

        location / {
            try_files $uri $uri/ /index.php;
        }

        location ~ \.php$ {
            try_files $uri =404;
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini

            # With php5-cgi alone:
            #fastcgi_pass 127.0.0.1:9000;
            # With php5-fpm:
            fastcgi_pass unix:/srv/run/php-fpm.sock;
            fastcgi_index index.php;
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
            fastcgi_param   SERVER_PORT             80;
        }

        #location /static/ {
        #        alias /srv/static/;
        #}
}

U jiných technologií se může soubor jmenovat jinak, ale princip zůstává stejný.

Přidáním pár řádek navíc přidáte přesměrování tak, aby všechny domény byly přesměrovány na jednu jedinou:

if ( $host != "www.example.com" ) {
    return 301 $scheme://www.example.com$request_uri;
}

Kde www.example.com nahraďte za svou primární doménu.

Případně je možné použít univerzální přesměrování www na non-www domény:

if ( $host ~ ^www\.(?<domain>.+)$ ) {
    return 301 $scheme://$domain$request_uri;
}

a obráceně:

if ( $host !~ ^www\. ) {
    return 301 $scheme://www.$host$request_uri;
}

Přesměrování patří mimo location direktivu, takže ho můžete hodit třeba mezi index a port_in_redirect.

Když jste hotovi, nezapomeňte restartovat nginx:

systemctl restart nginx